详细介绍Web安全之XML注入的示例代码

互联网 17-3-8
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>";

这样就解决啦。

以上就是详细介绍Web安全之XML注入的示例代码的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: Web,XML
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:java读取XML文件的四种方式及比较的代码实例详细介绍

相关资讯