Xml 不允许<;!元素>;以及模式中的其他声明(DTD、XSD)?

Xml 不允许<;!元素>;以及模式中的其他声明(DTD、XSD)?,xml,security,xsd,xsd-validation,dtd,Xml,Security,Xsd,Xsd Validation,Dtd,如果包含和类似声明,是否有方法使用模式(最好是XSD)让XML文档的验证失败 或者XML解析器仍然容易受到攻击并最终崩溃 示例:十亿人笑 <?xml version="1.0"?> <!DOCTYPE lolz [ <!ENTITY lol "lol"> <!ENTITY lol2 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lo

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

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

示例:十亿人笑

<?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;
&lol9被解析并扩展为10x
&lol8
等等,最后创建100000000个
lol
实体,可能会导致XML解析器内存不足


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

否,XSD限制已解析XML文档的信息集;任何DTD处理在逻辑上都在XSD验证之前,XSD无法要求、允许或禁止DTD的存在或不存在


我相信一些XML解析器有调用选项来限制其资源使用;即使解析器没有该选项,操作系统通常也会有。

一些解析器似乎有专有选项来禁止内联DTD声明,这可能是保护主机环境的唯一安全方法。