C# 解析加载读取XML文件的正确姿势


C# 解析加载读取XML文件的正确姿势

危险写法

在C#加载XML文件时,我们常用的做法是:

C# 全选
XmlDocument doc = new XmlDocument()
doc.LoadXml(xmlFileName)

如果你要这样写,就会引发一个 XML外部实体注入漏洞

一级类:代码注入

二级类:XML外部实体注入

漏洞详细信息

XML1.0标准里,XML文档结构里定义了实体(entity)这个概念。实体可以通过预定义在文档中调用,实体的标识符可访问本地或远程内容。如果在这个过程中引入了污染,通过构造恶意内容,可导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等危害。

**例如:**

XML 全选
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE a [
<!ELEMENT a ANY >
<!ENTITY xxe SYSTEM "file:///c:/Windows/win.ini" >]><a>&xxe;</a>

如果 XML 解析器尝试使用 c:/Windows/win.ini 系统文件中的内容来替代实体,则此示例会暴露该文件中的内容。

修复建议

预防XXE攻击的最佳方式就是禁用XML实体解析,方法是:将DtdProcessing设置为DtdProcessing.

 

Prohibit来禁用inline DTD,或将XmlReaderSettings.XmlResolver属性设置为null来禁用XML Entity解析:

C# 全选
XmlReaderSettings settings = new XmlReaderSettings();
settings.DtdProcessing =DtdProcessing.Prohibit;
settings.XmlResolver = null;
XmlReader reader = XmlReader.Create(stream, settings);

如果必须在应用程序中处理外部实体,可以创建一个自定义XmlResolver

设置请求超时,预防无限延迟攻击;

限制将检索的数据量;

限制 XmlResolver 检索本地主机上的资源。

详细代码可参考: https://msdn.microsoft.com/en-us/magazine/ee335713.aspx

 

实例

xml转换为json字符串

C# 全选
XmlReaderSettings settings = new XmlReaderSettings();
settings.DtdProcessing = DtdProcessing.Prohibit;
settings.XmlResolver = null;
XmlReader reader = XmlReader.Create(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "WindowsFormsApp1.xml"), settings);
var jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(reader);

 

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
张国生
上一篇:C# winform程序判断是否管理员运行
下一篇:JS统计数组中合计SUM统计
评论列表

发表评论

评论内容
昵称:
关联文章

C# 解析读取XML文件正确姿势
System.BadImageFormatException:“未能文件或程序集 或它某一个依赖项。试图格式不正确程序
ASP.NET Core 中读取Post Request.Body 正确姿势
服务安装失败:未能文件或程序集
C#读取被进程占用文件,只读模式打开文件
RestSharp请求https添加Cookie信息正确姿势
C#解析指定dllapp.config配置文件
C# txt文本文件读取与写入,
.NET Core 中读取 Request.Headers 姿势
C# 读取txt文件生成Word文档
未能文件或程序集“CefSharp.Core.dll”或它某一个依赖项。
C#四舍五入正确方式Math.Round
文件或目录损坏且无法读取
从数据库或者其他位置ASP.NET MVC Views 视图 数据库中加 cshtml
MEF会缺少一些dll,
Devexpress 表格GridView列RepositoryItemPictureEdit异步远程URL图片
Python爬虫解析网页提取html信息常用方式
[WPF] 实现两个任天堂 Switch 动画
winform自定义控件(UserControl)研究
WPF 组织机构摄像机树 全量 大数据量 分页摄像机节点

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码