1.5 拒绝服务
拒绝服务攻击试图使计算机的资源不可获得,或者对需要使用该计算机资源的用户来说,会造成资源不足的情况。通常这种攻击是持续服务的服务器系统需要重点关注的,它与桌面应用程序有很大区别;然而,拒绝服务的问题可以出现在所有类别的应用上。
1.5.1 资源耗尽型的拒绝服务
拒绝服务可能出现在,相对于输入数据需要的资源消耗来说,使用比例上更为巨大的资源。通过客户端软件检查资源是否被过度消耗,并希望用户来处理与资源相关的问题是不合理的。但是,存在这样的客户端软件,它们可以检查那些可能会导致持久拒绝服务的输入,比如将文件系统进行填充的操作。
《Java安全编码指南》(Secure Coding Guidelines for the Java Programming Language)[SCG 2009]中列举了可能的攻击的例子:
请求一个大的矢量图片,如SVG文件或者字体文件。
“Zip炸弹”(Zip bomb)那些如ZIP、GIF或那些经过gzip编码的HTML内容,会因为解压而消耗大量的资源。
“XML解析炸弹”,在解析的时候,在扩展XML所包含的实体时,有可能会使得XML文档急剧增长。可以通过设置XMLConstants.FEATURE_SECURE_PROCESSING功能并设置合理的限度值解决前面的问题。
过度使用的磁盘空间。
在一个散列表中插入了多个密钥,而这些密钥使用相同的散列码。这样会导致最差的性能(O(n2))而不是平均性能(O(n))。
发起许多连接,服务器为每个连接分配大量的资源(例如传统的洪水攻击)。
针对拒绝服务攻击并防止出现资源耗尽的规则,有以下几点:
1.5.2 与并发相关的拒绝服务
某些拒绝服务攻击是通过试图引入并发问题来实现的,如线程死锁、线程饥饿和竞态。
针对拒绝服务攻击并防止出现并发问题的规则,有以下几点:
1.5.3 其他的拒绝服务攻击
其他预防拒绝服务攻击的规则如下:
1.5.4 拒绝服务的前提
其他的规则会处理安全漏洞,这些安全漏洞会导致拒绝服务攻击,但它们自己并不足以导致拒绝服务: