c++ - 防止 xml 炸弹 XercesDOMParser - C++

标签 c++ dom xerces

我正在使用 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/

相关文章:

c++ - 使用 4 个线程获取/释放语义

c++ - 使用 C++ 通过 UDP 将 float 发送到 QuartzComposer

javascript - 在使用 DOM/js/css 时隐藏/显示 div 时出现问题

javascript - Angular2 setinterval 在 dom 更改时被阻止

javascript - 确定使用 CSS 移动的背景图像的左上角坐标

c++ - 在 C++11(或更新版本)中创建 RAII 包装器而无需编写新类的最短路径是什么?

c++ - 如何处理WASAPI流中的声音数据 block 而不将它们写入文件?

java - 尝试在 java 中构建 Apache Xerces 时出现编译错误

Groovy Grape 处理依赖解析

Ruby 的 XML 解析器