安全岗位面试题更新 2026-08-05

请解释一下 XXE 攻击的概念,并说明在开发中如何有效防护 XXE 漏洞?

安全意识技术原理

考察说明

考查对 XXE 攻击原理的理解以及实际防御措施的掌握。

回答思路

  1. 【回答框架 1】XXE 即 XML 外部实体注入,攻击者利用 XML 解析器对外部实体的处理缺陷,通过构造恶意 XML 文档,可读取服务器文件、发起 SSRF 请求或导致 DoS。
  2. 【回答框架 2】防御措施包括:禁用 XML 解析器的外部实体解析功能,如设置 DocumentBuilderFactory 的 setFeature 禁用 external-general-entities 和 external-parameter-entities;使用安全的解析库或配置;对用户提交的 XML 进行白名单校验。
  3. 【回答框架 3】处理 DTD 时,禁止加载外部 DTD 文件,避免实体扩展攻击(如 billion laughs);同时输入验证和输出编码也很重要。
  4. 【回答框架 4】在架构层面,可隔离解析环境,限制网络访问,减少 SSRF 影响;并定期更新解析库版本以防已知漏洞。
  5. 【回答框架 5】所有防御措施需结合具体语言和框架落地,确保全局配置生效,避免因配置缺失而留下风险。
  6. 【关键点 1】XXE 漏洞核心是 XML 解析器默认允许外部实体加载,导致信息泄露和 SSRF。
  7. 【关键点 2】防御首选是禁用所有外部实体解析,包括一般实体和参数实体。
  8. 【关键点 3】对外部 DTD 文件严格限制,不接受不可信来源的 DTD。
  9. 【关键点 4】使用安全配置的解析器,如 libxml2 关闭实体替换,Java 中禁用相关属性。
  10. 【关键点 5】输入验证不可少,但必须与解析器安全配置配合,不能单独依赖黑名单。
  11. 【易错点 1】只禁用 general entities 而忽略 parameter entities,仍然可能被绕过。
  12. 【易错点 2】未考虑解析库的默认配置差异,如部分库在特定版本下默认允许外部实体,导致防护失效。
  13. 【易错点 3】将输入过滤作为唯一防御手段,忽视底层解析器安全,无法抵御变种攻击。