欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

Web安全之XML注入

来源:本站整理 作者:佚名 时间:2016-10-29 TAG: 我要投稿

XML注入攻击,和SQL注入的原理一样,都是攻击者输入恶意的代码来执行自身权限以外的功能。 

XML是存储数据的一种方式,如果在修改或者查询时,没有做转义,直接输入或输出数据,都将导致XML注入漏洞。攻击者可以修改XML数据格式,增加新的XML节点,对数据处理流程产生影响。

攻击

下面是一个保存注册用户信息为XML格式的例子:

final String GUESTROLE = "guest_role";

...

//userdata是准备保存的xml数据,接收了name和email两个用户提交来的数据。

String userdata = "<USER role="+

                GUESTROLE+

                "><name>"+

                request.getParameter("name")+

                "</name><email>"+

                request.getParameter("email")+

                "</email></USER>";

//保存xml

userDao.save(userdata);

可以看到,这段代码没有进行任何的过滤操作。一个普通用户注册后,会产生这样一条数据记录:

<?xml version="1.0" encoding="UTF-8"?>

<USER role="guest_role">

    <name>user1

    </name>

    <email>user1@a.com

    </email>

</USER>

攻击者输入自己email时,可以输入如下代码:

user1@a.com</email></USER><USER role="admin_role"><name>lf</name><email>user2@a.com

最终用户注册后,数据就变成了:

<?xml version="1.0" encoding="UTF-8"?>

<USER role="guest_role">

    <name>user1

    </name>

    <email>user1@a.com</email>

</USER>

<USER role="admin_role">

    <name>lf</name>

    <email>user2@a.com

    </email>

</USER>

可以看到,多出了一条role=“admin_role”的管理员lf。达到攻击目的。

防御

还是那句老话,有攻击就有防御。防御的原理其实也很简单,就是对关键字符串进行转义:

& --> &

 < --> <

 > --> >

 " --> "

 ' --> ' 

在XML保存和展示之前,对数据部分,单独做转义即可:

String userdata = "<USER role="+

                GUESTROLE+

                "><name>"+

                StringUtil.xmlencode(request.getParameter("name"))+

                "</name><email>"+

                StringUtil.xmlencode(rrequest.getParameter("email"))+

                "</email></USER>";

这样就解决啦。

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载