我正在使用 XercesDOMParser 在 linux (c++) 中读取 xml 文件,我想防止 xml 炸弹(Billion 笑)所以我设置了这些属性:
parser->setDoNamespaces(true)
parser->setDisableDefaultEntityResolution(true)
parser->setEntityResolver(NULL)
parser->setSkipDTDValidation(true)
然而,这并没有帮助,炸弹仍然存在。 你知道如何防止它吗(我必须只使用带有 DOM 的 xerces)
10 倍!
最佳答案
没有直接的方法来防止实体扩展,从而防止 billion laughs 攻击。这是因为 billion laughs attacks 可以是格式良好的 XML,而 XercesDOMParser
是 DOM 的非常严格的实现。但是,您可以通过添加 SecurityManager
来防止 Xerces 中的 billion laughs 攻击。
SecurityManager sm;
sm.setEntityExpansionLimit(100);
parser->setSecurityManager(&sm);
如果您将其添加到您的代码中,当解析器扩展的实体数量超过您设置的实体数量(在本例中为 100)时,Xerces 将抛出一个 SAXParseException
。这将防止大笑。
关于c++ - 防止 xml 炸弹 XercesDOMParser - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5549804/