XML文件上传路径遍历漏洞 如何防范../攻击-XML/RSS教程

应同时进行路径归一化校验和XML解析器安全配置:先用os.path.realpath()或Paths.get().toRealPath()解析用户路径并与白名单根目录比对前缀,再禁用DOCTYPE声明及外部实体加载。

XML解析时如何阻止../路径遍历

XML文件上传后若直接用用户输入的文件名拼接本地路径(比如读取document.dtd或外部实体),攻击者可通过../向上跳转目录,读取/etc/passwd或应用配置文件。关键不是“禁用外部实体”,而是从路径构造环节就切断遍历可能。

  • 所有用户可控的文件名/路径参数必须经过os.path.realpath()(Python)或Paths.get().toRealPath()(Java NIO)解析后,再与白名单根目录比对前缀
  • 禁止用String.replace("../", "")或正则简单过滤——....//、%2e%2e%2f、..\(Windows)仍可绕过
  • 若使用DocumentBuilder或libxml2加载XML,必须显式关闭外部实体:设置setFeature("http://apache.org/xml/features/disallow-doctype-decl", true)

Java中SAX/DOM解析器的安全配置

默认SAXParserFactory和DocumentBuilderFactory允许外部DTD和实体,这是XXE和路径遍历的共同入口。仅靠应用层校验路径不解决根本问题。

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);
dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
dbf.setXIncludeAware(false);
  • disallow-doctype-decl直接禁止/code>,最彻底
  • 若业务必须支持DOCTYPE(极少见),则需配合EntityResolver拦截所有resolveEntity调用,返回空InputSource
  • 注意:Tomcat 8.5+ 默认已禁用外部实体,但Spring Boot内嵌Tomcat若覆盖了DocumentBuilderFactory bean,仍可能回退到不安全状态

Python lxml与defusedxml的选型差异

lxml默认开启外部实体,且etree.parse()会自动加载file://协议资源;而defusedxml是专为防御XXE设计的封装层,但不处理路径拼接逻辑。

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » XML文件上传路径遍历漏洞 如何防范../攻击-XML/RSS教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4021688+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4021688+
  • 本周更新: 0+
  • 最后更新: 2026-03-16