xml注入攻击,和sql注入的原理一样,都是攻击者输入恶意的代码来执行自身权限以外的功能。 xml是存储数据的一种方式,如果在修改或者查询时,没有做转义,直接输入或输出数据,都将导致xml注入漏洞。攻击者可以修改xml数据格式,增加新的xml节点,对数据处理流程产生影响。
攻击
下面是一个保存注册用户信息为XML格式的例子:
final String GUESTROLE = "guest_role"; ... //userdata是准备保存的xml数据,接收了name和email两个用户提交来的数据。 String userdata = ""; //保存xml userDao.save(userdata); "+ request.getParameter("name")+ " "+ request.getParameter("email")+ "
可以看到,这段代码没有进行任何的过滤操作。一个普通用户注册后,会产生这样一条数据记录:
user1 user1@a.com
攻击者输入自己email时,可以输入如下代码:
user1@a.comlf user2@a.com
最终用户注册后,数据就变成了:
user1 user1@a.com lf user2@a.com
可以看到,多出了一条role=“admin_role”的管理员lf。达到攻击目的。
《PHP设计模式》首先介绍了设计模式,讲述了设计模式的使用及重要性,并且详细说明了应用设计模式的场合。接下来,本书通过代码示例介绍了许多设计模式。最后,本书通过全面深入的案例分析说明了如何使用设计模式来计划新的应用程序,如何采用PHP语言编写这些模式,以及如何使用书中介绍的设计模式修正和重构已有的代码块。作者采用专业的、便于使用的格式来介绍相关的概念,自学成才的编程人员与经过更多正规培训的编程人员
防御
还是那句老话,有攻击就有防御。防御的原理其实也很简单,就是对关键字符串进行转义:
& --> & < --> < > --> > " --> " ' --> '
在XML保存和展示之前,对数据部分,单独做转义即可:
String userdata = ""; "+ StringUtil.xmlencode(request.getParameter("name"))+ " "+ StringUtil.xmlencode(rrequest.getParameter("email"))+ "
这样就解决啦。









