当前位置: 首页 > news >正文

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>";

相关文章:

  • Docker入门篇--从安装到使用
  • 回调接口模式
  • Docker|简单入门
  • Android自动化AirScript
  • Appium+python自动化(二十)-- Monkey日志
  • ATM 模拟器 Golang 程序--示例
  • 油烟净化设备安装规范
  • 基于SpringBoot的校园网上求职系统设计与实现
  • 双系统(win+linux)根目录扩容(不掉GPU驱动)
  • 【leetcode】226. 翻转二叉树
  • 一分钟了解MCP
  • 无人机安防系统是什么?主流无人机安防平台有哪些?
  • iOS App上线前的安全防线:项目后期如何用Ipa Guard与其他工具完成高效混淆部署
  • @RequestBody和@ResponseBody注解的作用是什么
  • 告别手动做PPT!4款AI工具实现自动化生成
  • 使用 VLC Media Player 轻松提取视频中的音频文件
  • Python 实现 Web 请求与响应
  • AI 工具打造专业级 PPT 配图:从文字到视觉的高效转化指南
  • 关键领域软件测试新范式:如何在安全合规前提下提升效率?
  • 岗位竞聘竞选报告个人简历PPT模版分享
  • 烟台网站制作步骤/优化百度涨
  • 没有网站也可以做外贸吗/制作网站大概多少钱
  • 网站建设制作设计推广/如何查看百度搜索指数
  • 长沙哪些公司做网站/网站搜什么关键词好
  • 网站建设软件下载/seo推广思路
  • 网站建设案例基本流程图/客户引流推广方案