禁止<! - ELEMENT - >和模式中的其他声明(DTD,XSD)?

时间:2014-04-25 14:55:26

标签: xml security xsd xsd-validation xml-dtd

如果包含<!ELEMENT ...>和类似的声明,是否有办法使用模式(最好是XSD)让XML文档的验证失败?

或者XML解析器是否仍然容易受到攻击并最终崩溃?

http://resources.infosecinstitute.com/xml-vulnerabilities/

示例:十亿笑

<?xml version="1.0"?>
<!DOCTYPE lolz [
<!ENTITY lol "lol">
<!ENTITY lol2 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
<!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
<!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
<!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">
<!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">
<!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">
<!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">
<!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">
]>
<lolz>&lol9;</lolz>

&lol9;被解析并扩展为10x &lol8;,依此类推,最终创建了1,000,000,000个lol实体,并可能使XML解析器耗尽内存。

是否可以在 MSXML 6.0 中利用任何列出的漏洞?

1 个答案:

答案 0 :(得分:1)

不,XSD约束解析的XML文档的信息集;任何DTD处理在逻辑上都在XSD验证之前,并且XSD无法要求,允许或禁止DTD的存在或不存在。

我相信一些XML解析器具有绑定其资源使用的调用选项;即使解析器没有该选项,操作系统通常也会这样做。