我是靠谱客的博主 闪闪羽毛,这篇文章主要介绍详细介绍Web安全之XML注入的示例代码,现在分享给大家,希望可以做个参考。

XML注入攻击,和SQL注入的原理一样,都是攻击者输入恶意的代码来执行自身权限以外的功能。 XML是存储数据的一种方式,如果在修改或者查询时,没有做转义,直接输入或输出数据,都将导致XML注入漏洞。攻击者可以修改XML数据格式,增加新的XML节点,对数据处理流程产生影响。

攻击

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

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
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);
登录后复制

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

复制代码
1
2
3
4
5
6
7
<?xml version="1.0" encoding="UTF-8"?> <USER role="guest_role"> <name>user1 </name> <email>user1@a.com </email> </USER>
登录后复制

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

复制代码
1
user1@a.com</email></USER><USER role="admin_role"><name>lf</name><email>user2@a.com
登录后复制

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

复制代码
1
2
3
4
5
6
7
8
9
10
11
<?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。达到攻击目的。

防御

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

复制代码
1
2
3
4
5
& --> & < --> < > --> > " --> " ' --> '
登录后复制

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

复制代码
1
2
3
4
5
6
7
String userdata = "<USER role="+ GUESTROLE+ "><name>"+ StringUtil.xmlencode(request.getParameter("name"))+ "</name><email>"+ StringUtil.xmlencode(rrequest.getParameter("email"))+ "</email></USER>";
登录后复制

这样就解决啦。


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

最后

以上就是闪闪羽毛最近收集整理的关于详细介绍Web安全之XML注入的示例代码的全部内容,更多相关详细介绍Web安全之XML注入内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(113)

评论列表共有 0 条评论

立即
投稿
返回
顶部