gpt4 book ai didi

java - 可以配置 JAXB 来防止实体扩展攻击吗?

转载 作者:数据小太阳 更新时间:2023-10-29 01:53:53 24 4
gpt4 key购买 nike

通常在 java 中解析 XML 时,可以避免成为 entity expansion attacks 的受害者。通过使用

dbf.setFeature(javax.xml.XMLConstants.FEATURE_SECURE_PROCESSING, true);

其中 dbf 是用于创建用于 XML 解析的 DocumentBuilder 的 DocumentBuilderFactory。

但是,假设我正在使用 JAXB 解码一些 XML,例如像这样:

  final JAXBContext context = JAXBContext.newInstance(MyClass.class);
final Unmarshaller unmarshaller = context.createUnmarshaller();
final MyClass result = (MyClass) unmarshaller.unmarshal(input);

如何配置 JAXB 以在底层 XML 解析器上使用 FEATURE_SECURE_PROCESSING?

通过谷歌搜索得到以下最佳结果: http://forums.java.net/node/699983

但是,我不想为了使实体扩展可配置而引入 XMLStreamFactory 等的实现。有没有一种方法可以仅使用 JAXB API 来解决这个问题?

最佳答案

Java SE 5 将实体扩展的数量限制为 64,000:

我希望所有 JAXB 实现都保留此默认保护。但是,如果您想 100% 确定可以通过以下方式创建 SAXSource 并让 JAXB 对其进行解码:

SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
SAXParser sp = spf.newSAXParser();
XMLReader xmlReader = sp.getXMLReader();
SAXSource saxSource = new SAXSource(xmlReader, inputSource);

有关详细信息,请参阅:

关于java - 可以配置 JAXB 来防止实体扩展攻击吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5274252/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com