Web安全之XML注入
来源:互联网 发布:西门子vb 编辑:程序博客网 时间:2024/05/18 03:33
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>";//保存xmluserDao.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>";
这样就解决啦。
2 0
- Web安全之XML注入
- WEB安全之SQL注入
- Web安全之SQL注入
- Web安全之SQL注入
- web安全 XML实体注入风险
- web 安全之sql 注入(一)
- 关于web安全之sql注入攻击
- Web安全之SQL注入攻击
- web安全学习笔记之-注入攻击
- web安全 之 sql注入防御
- Web安全之SQL注入攻击
- [web安全] SQL注入之SQLServer
- [web安全] SQL注入之MySQL
- [web安全] SQL注入之Oracle
- Web安全之XSS与SQL注入
- web安全:SQL注入
- web安全:SQL注入
- WEB安全:SQL注入
- php解析json
- 基于随机森林的煤与瓦斯突出预测方法研究
- 目标检测——背景更新法
- IO流(Input Output)--引入
- Flyer(二分 HDU4768)
- Web安全之XML注入
- 设置session有效时间的方法
- Item 21:需要返回对象时,不要返回引用 Effective C++笔记
- 再谈高级程序员核心竞争力
- 浏览器兼容性问题
- 【HTML】html 小技巧
- 电路原理图元器件命名规范
- IO流的方法
- 总线——i2c协议