服务器的被请求了7200次,处理了6000次,于是剩下了1200个并发连接没有被处理.有的朋友会说:丢连接!丢连接!问题是服务器是按先来后到的顺序丢的,这1200个是在最后10秒的时候发起的,想丢?!还早,经过计算,服务器满负开始丢连接的时候,应该是有7200个并发连接存在队列,然后服务器开始120个/秒的丢连接,我们发动的连接也是120个/秒,服务器永远有处理不完的连接,服务器的CPU 100%并长时间保持,然后丢连接的60秒服务器也判断处理不过来了,新的连接也处理不了,这样服务器达到了超级繁忙状态。
蝴蝶:我们假设服务器处理Search只用了0.01S,也就是10毫秒(这个速度你可以去各个有开放时间显示的论坛看看),我们使用的线程也只有120,很多服务器的丢连接时间远比60S长,我们的使用线程远比120多,可以想象可怕了吧,而且客户机只要发送了断开,连接的保持是代理做的,而且当服务器收到SQL请求,肯定会进入队列,不论连接是否已经断开,而且服务器是并发的,不是顺序执行,这样使得更多的请求进入内存请求,对服务器负担更大。
当然,CC也可以利用这里方法对FTP进行攻击,也可以实现TCP-FLOOD,这些都是经过测试有效的。
防范方法
说了攻击原理,大家肯定会问,那么怎么防御?使用硬件防火墙我不知道如何防范,除非你完全屏蔽页面访问,我的方法是通过页面的编写实现防御。
1. 使用Cookie认证.这时候朋友说CC里面也允许Cookie,但是这里的Cookie是所有连接都使用的,所以启用IP+Cookie认证就可以了。
2. 利用Session.这个判断比Cookie更加方便,不光可以IP认证,还可以防刷新模式,在页面里判断刷新,是刷新就不让它访问,没有刷新符号给它刷新符号.给些示范代码吧,Session:
程序代码:
〈%
if session(“refresh”)〈〉 1 then
Session(“refresh”)=session(“refresh”)+1
Response.redirect “index.asp”
End if
%〉
这样用户第一次访问会使得Refresh=1,第二次访问,正常,第三次,不让他访问了,认为是刷新,可以加上一个时间参数,让多少时间允许访问,这样就限制了耗时间的页面的访问,对正常客户几乎没有什么影响。
3. 通过代理发送的HTTP_X_FORWARDED_FOR变量来判断使用代理攻击机器的真实IP,这招完全可以找到发动攻击的人,当然,不是所有的代理服务器都发送,但是有很多代理都发送这个参数.详细代码:
程序代码:
〈%
Dim fsoObject
Dim tsObject
dim file
if Request.ServerVariables("HTTP_X_FORWARDED_FOR")="" then
response.write "无代理访问"
response.end
end if
Set fsoObject = Server.CreateObject("Scripting.FileSystemObject")
file = server.mappath("CCLog.txt")
if not fsoObject.fileexists(file) then
fsoObject.createtextfile file,true,false
0
顶一下0
埋一下引用地址:



