提问人:rickygrimes 提问时间:3/12/2014 更新时间:11/17/2021 访问量:3414
安全地解析 XML 文档
Parse XML document securely
问:
如何安全地分析 XML 文档,使其不允许外部实体作为传入 XML 文档的一部分?我正在使用 DOM 解析器 -
Document test = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(byteArrayInputStream))
答:
5赞
erickson
3/12/2014
#1
您可以通过设置 FEATURE_SECURE_PROCESSING
来请求安全处理;这是否禁止外部实体取决于 的提供者,但它可能是一个候选者。DocumentBuilderFactory
DocumentBuilderFactory f = DocumentBuilderFactory.newInstance();
f.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
Document test = f.newDocumentBuilder.parse(...);
评论
1赞
karsten314159
4/5/2017
值得注意的是,您还应该设置 否则您仍然容易受到外部实体攻击:f.setFeature( "http://xml.org/sax/features/external-general-entities", false );
org.apache.xerces.impl.XMLEntityManager.startEntity(Unknown Source) calls org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source) calls sun.net.www.protocol.ftp.FtpURLConnection.getInputStream(FtpURLConnection.java:393)
0赞
tobidiahstane
11/17/2021
#2
您需要设置:
DocumentBuilderFactory f = DocumentBuilderFactory.newInstance();
f.setFeature("http://xml.org/sax/features/external-general-entities", false);
f.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
f.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
f.setXIncludeAware(false);
f.setExpandEntityReferences(false);
Document test = f.newDocumentBuilder.parse(...);
避免外部实体扩张。
评论