XML注入攻击核心风险在于外部实体(XXE)、DOCTYPE滥用及未过滤用户输入拼接,防护需禁用外部实体、避免拼接输入、白名单验证、优先改用JSON。
XML注入攻击是指攻击者通过向应用程序提交恶意构造的XML数据,干扰或操控XML解析器行为,从而实现读取敏感文件、执行远程请求(SSRF)、触发拒绝服务(DoS),甚至执行任意代码等危害。它不单是“插入标签”那么简单,核心风险常来自外部实体(XXE)、DOCTYPE滥用、未过滤的用户输入拼接进XML结构等环节。
常见触发场景包括:
doc.createTextNode(input)未转义)防护不是靠“加一层过滤”,而是从设计到解析全程设防:
disallow-doctype-decl、external-general-entities=false;PHP调用libxml_disable_entity_loader(true);Python lxml启用no_network=True
createTextNode()或XMLWriter的WriteElementString()等安全方法,它们会自动转义、>、&等字符
有些坑看似小,却常导致防线失效:
DocumentBuilderFactory就可能绕过——必须显式配置安全特性file:///etc/passwd这类读取结果 ]>&xxe; 这类恶意载荷
eval()或innerHTML渲染)基本上就这些。核心就三句话:别拼接、要禁外部实体、信不过的输入一律当毒药处理。安全不在功能多,而在每一步都守住边界。