如果包含<!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 中利用任何列出的漏洞?
答案 0 :(得分:1)
不,XSD约束解析的XML文档的信息集;任何DTD处理在逻辑上都在XSD验证之前,并且XSD无法要求,允许或禁止DTD的存在或不存在。
我相信一些XML解析器具有绑定其资源使用的调用选项;即使解析器没有该选项,操作系统通常也会这样做。