一、概念:CC攻击的原理就是攻击者控制某些主机不停地发大量数据包给对方服务器造成服务器资源耗尽,一直到宕机崩溃。CC主要是用来攻击页面的,每个人都有这样的体验:当一个网页访问的人数特别多的时候,打开网页就慢了。CC就是模拟多个用户(多少线程就是多少用户)不停地进行访问那些需要大量数据操作(就是需要大量CPU时间)的页面,造成服务器资源的浪费,CPU长时间处于100%,永远都有处理不完的连接直至就网络拥塞,正常的访问被中止。

二、攻击方式:通常发起 CC 攻击是使用专门的攻击工具,同时模拟成多个用户,向目标网站发起多个请求,一般这些软件为了防止地址被屏蔽,还内置通过代理攻击的功能。可以通过多个代理服务器对目标发起攻击,使封 IP 的防御方式变的失效。

三、防御思路:此处以开启某网站卫士后,从界面上看,似乎是防止了大量的CC攻击,但登录网站后,流量依旧异常,攻击还是依旧,远未达到预期效果。从原理上看,基本上所有的防火墙都会检测并发的TCP/IP连接数目,超过一定的数目与频率被判定为Connection-Flood。如果IP的数量足够大,使得单个IP的连接数较少,那么防火墙未必能阻止CC攻击。

那么启用某网站卫士后,为什么反而更容易被CC攻击?这是因为网站卫士不能有效过滤CC攻击,攻击的IP经过其加速后,更换成为它的IP,在网站服务器端显示的IP都是相同的,导致服务器端无法过滤这些IP。因为 CC 攻击通过工具软件发起,而普通用户通过浏览器访问,这就是区别。

我们只有想到办法对这二者作出正确的判断,屏蔽来自机器的流量攻击就没问题了。

普通浏览器发起请求时,除了要访问的地址以外, Http 头中还会带有 Referer、UserAgent 等多项信息。遇到攻击时可以通过访问日志查看访问信息,看攻击的流量是否有明显特征,比如固定的 Referer 或 UserAgent ,如果能找到特征,就可以直接屏蔽掉了。

四、HTTP_Referer 名词解释:看单词知道大概意思是 http的访问来源,HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面连接过来的。

五、UserAgent 名词解释:HTTP_USER_AGENT是用来检查浏览页面的访问者在用什么操作系统(包括版本号)浏览器(包括版本号)和用户个人偏好的代码。

UserAgent 标准格式是 : 浏览器标识 (操作系统标识、加密等级标识、浏览器语言) 渲染引擎标识、版本信息(但是不同的浏览器的格式是不同的,大体都包括这些内容)

六、Token防御:用户初次访问的时候,我们定义规则 token(唯一key 生成),保存在 COOKIE 中作为 Token ,用户必须带有正确的 Token 才能访问后端服务。当用户第一次访问时,会检测到用户的 COOKIE 里面并没有这个 Token ,则返回一个 302 重定向跳转,目标地址为当前页面,同时在返回的 Http 头中加入,对 COOKIE 进行设置,使用户带有这个 Token 。

客户端如果是一个正常的浏览器,那么就会支持 HTTP 头中的 SET COOKIE 和 302 重定向指令,将带上正确的 Token 再次访问页面。这时候后台检测到正确的 Token 就会放行,这之后用户的 Http 请求都会带有这个 Token ,所以并不会受到阻拦。客户端如果是 CC 软件,那么一般不会支持这些指令,那么就会一直被拦在最外层,并不会对服务器内部造成压力。