XML 注入与修复

问题:
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>";

相关推荐
前网易架构师-高司机3 天前
带标注的扑克牌识别数据集,识别率99.5%,3083张图,支持yolo,coco json,voc xml,文末有模型训练代码
xml·yolo·json·数据集·数字·扑克牌·纸牌
执明wa4 天前
LayoutInflater详解: XML是如何变成View的?
android·xml·开发语言·android studio
IT_Octopus6 天前
一次由 RestTemplate 引发的 Connection reset:被 XML 截胡的请求体
xml·java·spring boot
Dontla6 天前
网站爬虫控制策略介绍(robots.txt、sitemap.xml、x-robots-tag、noindex、nofollow)网站索引
xml·爬虫·dubbo
风起洛阳@不良使7 天前
spring中xml和注解开发的对比
xml·java·spring
Mikowoo0078 天前
批量汇总XML格式的发票信息
xml·python
逃逸线LOF9 天前
xml文件如何加载properties文件(spring容器加载properties文件)
xml
前网易架构师-高司机11 天前
带标注的山体滑坡塌方数据集数据集,识别率78.1%,974张图,支持yolo,coco json,voc xml,文末有模型训练代码
xml·yolo·json·数据集·自然灾害·山体滑坡
程序媛kelly11 天前
.xml / .jrxml 文件怎么打开?OpenFiles 实测预览、编辑、搜索与 AI 摘要排查流程
xml·人工智能·jrxml
潘潘的嵌入式日记12 天前
改完Keil工程文件被缓存覆盖?——uvprojx编辑的进阶四坑
xml·嵌入式·keil·调试·mdk·工程文件