网络安全 | 如何预防网站被DoS攻击

1,758 阅读3分钟

窗体顶一、DoS(Denial Of Service)简介

     DoS(Denial Of Service),拒绝服务的缩写,是指故意攻击网络协议实现的缺陷或直接通过野 蛮手段耗尽被攻击对象的资源,目的是让目标计算机或网络无法提供正常的服务,使目标系统停止响应甚至崩溃。这些服务资源包括网络带宽,文件系统空间容量,开放的进程或者允许的连接。这种攻击会导致资源的匮乏,无论计算机的处理速度多快、内存容量多大、网络带宽的速度多快都无法避免这种攻击带来的后果。

    大多数的DoS攻击是需要相当大的带宽的,而以个人为单位的黑客没有可用的高带宽资源。为了克服这个缺点,DoS攻击者开发了分布式的攻击。攻击者利用工具集合许多的网络带宽来同时对同一个目标发动大量的攻击请求,这就是DDoS(Distributed Denial Of Service)攻击。可以说DDoS攻击是由黑客集中控制发动的一组DoS攻击的集合,这种方式被认为是最有效的攻击形式,并且非常难以抵挡。

二、如何预防网站被DoS/DDoS攻击

DoS/DDoS预防涉及硬件和软件,这里只介绍Web应用如何预防,如果我们的web系统遭受攻击,整个系统可能会因为内存泄漏,CPU资源耗尽,连接数被耗尽等,使得网站无法提供服务。

1. 首先,所有的http/https请求,必须通过身份的验证,没有登录的用户拒绝响应。这是必须做的,身份验证会增加攻击的难度。

2. 控制数据包的大小,根据自己的业务,设置数据包的最大值,当大于这个值的情况下可以拒绝服务。(业务最大只需要3M, 那么100M的请求就被拒绝了)

3. 对调用的参数进行校验,比如传输一个很大的数组给后台服务器,在多个请求同时遍历大数组的情况下,会导致CPU资源耗尽。    4. 除登录用户的校验,还必须增加随机数校验,解决跨站请求伪造的同时,大大增加了Dos攻击的难度。

5.在服务器响应中,不能无限启动新的线程。如果需要多线程处理,需要使用线程池的机制,并控制线程的数量。同时保证线程池不能过多,不能再请求中生成线程池。

6. 请求要有超时机制,防止请求线程被长时间占用,从而导致线程中的资源无法释放。

 

以上是我工作中遇到的一些情况,如果您有更好的建议,欢迎告诉我们。(在公众号中回复任何信息, 即可获取联系方式)