全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C#如何安全地解析XML以防止XXE注入

默认XmlDocument和XmlReader触发XXE因.NET默认启用DTD解析,需同时设DtdProcessing.Prohibit和XmlResolver=null;XmlSerializer也需用加固XmlReader;还需限制MaxDepth、MaxCharactersInDocument等防DoS。

为什么默认的 XmlDocumentXmlReader 会触发XXE

因为 .NET 默认启用 DTD 解析(XmlResolver 非空),当 XML 包含 ]> 这类声明时,XmlDocument.Load()XmlReader.Create() 会尝试解析并加载外部实体,导致文件读取、网络请求甚至 SSRF。

禁用 DTD 解析的两种可靠方式

核心是让解析器完全忽略 DOCTYPE 声明,不执行任何外部实体解析。推荐以下任一做法:

  • 使用 XmlReaderSettings 显式关闭:
    var settings = new XmlReaderSettings
    {
        DtdProcessing = DtdProcessing.Prohibit, // 关键:禁止 DTD 处理
        XmlResolver = null                      // 关键:移除解析器
    };
    using var reader = XmlReader.Create(stream, settings);
    var doc = new XmlDocument();
    doc.Load(reader);
  • XmlDocument 直接设置:
    var doc = new XmlDocument();
    doc.XmlResolver = null; // 必须在 Load 前设置
    doc.Load(xmlStream);
    注意:此方式仅在 .NET Framework 4.5.2+ 和 .NET Core 2.0+ 有效;旧版需配合 ProhibitDtd = true(但该属性已过时)

别踩 XmlSerializer 的坑

XmlSerializer 默认不解析 DTD,看似安全,但它会隐式使用 XmlReader,若你传入的是未加固的 XmlReader 实例,风险仍在。安全做法是始终用加固后的 XmlReader 构造:

var settings = new XmlReaderSettings { DtdProcessing = DtdProcessing.Prohibit, XmlResolver = null };
using var reader = XmlReader.Create(stream, settings);
var serializer = new XmlSerializer(typeof(MyClass));
var obj = serializer.Deserialize(reader);

不要直接传 streamDeserialize() —— 它会内部创建不设防的 reader。

额外加固:限制解析深度与大小

防止恶意构造的超深嵌套或超大文本耗尽内存:

  • MaxDepth = 10(默认 64,建议压到 8–12)
  • MaxCharactersInDocument = 10 * 1024 * 1024(如限制 10MB)
  • MaxCharactersFromEntities = 10240(防实体膨胀攻击)

这些都应在 XmlReaderSettings 中一并配置,否则单禁 DTD 仍可能被 DoS。

XXE 防御不是“关一个开关”就完事;DtdProcessing.ProhibitXmlResolver = null 必须同时生效,且所有入口(XmlDocumentXmlReaderXmlSerializer)都要走同一套加固逻辑。漏掉任意一种路径,攻击面就还在。


# stream  # c#  # .net  # 为什么  # NULL  # xml  # 它会  # 的是  # 还在  # 两种  # 这类  # 要走  # 应在  # 还需  # 移除  # 旧版 


相关文章: 网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  兔展官网 在线制作,怎样制作微信请帖?  c# 在高并发场景下,委托和接口调用的性能对比  零基础网站服务器架设实战:轻量应用与域名解析配置指南  制作宣传网站的软件,小红书可以宣传网站吗?  在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?  建站主机选购指南:核心配置与性价比推荐解析  深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?  专业商城网站制作公司有哪些,pi商城官网是哪个?  如何用PHP快速搭建CMS系统?  中山网站制作网页,中山新生登记系统登记流程?  常州自助建站费用包含哪些项目?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  北京企业网站设计制作公司,北京铁路集团官方网站?  定制建站流程解析:需求评估与SEO优化功能开发指南  建站VPS推荐:2025年高性能服务器配置指南  建站之星如何优化SEO以实现高效排名?  如何通过建站之星自助学习解决操作问题?  专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?  网站制作公司排行榜,四大门户网站排名?  如何在Ubuntu系统下快速搭建WordPress个人网站?  如何快速搭建个人网站并优化SEO?  存储型VPS适合搭建中小型网站吗?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  如何确保FTP站点访问权限与数据传输安全?  如何正确下载安装西数主机建站助手?  如何自定义建站之星模板颜色并下载新样式?  如何快速搭建高效简练网站?  商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?  网站制作的步骤包括,正确网址格式怎么写?  浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?  自助网站制作软件,个人如何自助建网站?  C#如何序列化对象为XML XmlSerializer用法  如何用AWS免费套餐快速搭建高效网站?  如何基于云服务器快速搭建个人网站?  如何快速搭建高效可靠的建站解决方案?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  c++ stringstream用法详解_c++字符串与数字转换利器  深圳网站制作的公司有哪些,dido官方网站?  建站之星CMS建站配置指南:模板选择与SEO优化技巧  长沙企业网站制作哪家好,长沙水业集团官方网站?  香港服务器如何优化才能显著提升网站加载速度?  平台云上自主建站:模板化设计与智能工具打造高效网站  建站之星代理商如何保障技术支持与售后服务?  建站之星展会模板:智能建站与自助搭建高效解决方案  网站制作说明怎么写,简述网页设计的流程并说明原因?  深圳企业网站制作设计,在深圳如何网上全流程注册公司?  定制建站方案优化指南:企业官网开发与建站费用解析 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。