日期:2011-12-30 08:35:00 来源:本站整理
Asp 防备CC攻击模块 (Anti-CC.asp)[网站编程]
本文“Asp 防备CC攻击模块 (Anti-CC.asp)[网站编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
该模块对全部Asp脚本通用,独立运行的,只需求在想保护的页面加上:<!--#include file="Inc/Anti-CC.asp"-->,便可.
脚本法则以下:
1、持续10次拜候频率低于1秒的,断定为攻击,封禁IP,这个时间和次数可以自定义,法则放的对比宽,误判概率极低.
2、封禁时间按照攻击频率计算,攻击频率越高,封的越久,假如你在封禁时间段内仍旧拜候,那么封禁时间会积累增添,你如果被封了10分钟以上,倡议你还是换IP吧,囧……
3、移撤除15分钟内没有拜候的用户(时间可自定义).
由于是高速内存全局变量,不读写文件,不读写数据库,高效查询,所以没必要耽忧会损耗很多资源,实际上只损耗极少的极少的资源,还没你正常拜候损耗得多,可忽视不计.
给个查询接口,显示当前全部在线用户:http://lcx.cc/?cc=showuser,假如阈值大于10,那表示是被封的用户,囧……
具体介绍见这里:http://lcx.cc/?FoxNews=2092.html
- <%
- On Error Resume Next
- 'Asp 防备CC攻击模块 (Anti-CC), By:Nuclear'Atk, At:2011-12-24 11:55:44.
- Dim IP0, TimeOut, Interval, Anti_CC, BrowX
- TimeOut = 900 '超不时间(秒)
- Interval = 1 '最短革新隔断(秒)
- CC_Max = 10 '临界值(次)
- IP0 = Request.ServerVariables("REMOTE_ADDR") '客户端IP
- BrowX = Replace(Request.ServerVariables("HTTP_USER_AGENT"), vbCrLf, "") '客户端浏览器
- Application.Lock
- If IsEmpty(Application(IP0)) Then '用户第一次拜候
- Application(IP0) = "0" & vbCrLf & _
- Now & vbCrLf & _
- Now & vbCrLf & _
- BrowX & vbCrLf & _
- GetFullUrl()
- Else
- CC = Split(Application(IP0), vbCrLf) '提取数据分割为数组
- If Int(CC(0)) => CC_Max Then '能否被封
- If DateDiff("S", CC(2), Now) >= Int(CC(0)) Then '判断能否需求解封
- CC(0) = "0"
- CC(2) = Now
- SaveToApp() '保存数据
- Else
- CC(0) = Int(CC(0)) + 1 '累加被封时间
- SaveToApp() '保存数据
- If Request("cc") <> "showuser" Then BanIPMsg
- End If
- Else
- If DateDiff("S", CC(2), Now) <= Interval Then '判断拜候隔断
- CC(0) = Int(CC(0)) + 1 '临界值+1
- Else
- If Int(CC(0)) < 1 Then '处理负数
- CC(0) = 0
- Else
- CC(0) = Int(CC(0)) - 1 '临界值-1
- End If
- End If
- CC(2) = Now '革新最后拜候时间
- SaveToApp() '保存数据
- End If
- End If
- If Request("cc") = "showuser" Then
- Response.Clear
- Response.Write "<table width='100%' BORDER='1' style='font-size:12px' width='100%'><tr><TD width='100'>IP</TD><TD width='40' align='center'>阈值</TD><TD width='140' align='center'>初次拜候</TD><TD width='140' align='center'>最后拜候</TD><TD>用户信息</TD><TD>拜候网址</TD></tr>" & vbCrLf
- End If
- For Each Anti_CC In Application.Contents
- CC = Split(Application(Anti_CC), vbCrLf) '分割为数组
- If DateDiff("S", CC(2), Now)=>TimeOut Then '超时则销毁变量
- Application.Contents.Remove (Anti_CC)
- End If
- If Request("cc") = "showuser" Then Response.Write "<tr><TD>" & Anti_CC & "</TD><TD align='center'>" & CC(0) & "</TD><TD align='center'>" & CC(1) & "</TD><TD align='center'>" & CC(2) & "</TD><TD>" & Server.HtmlEncode(CC(3)) & " </TD><TD>" & Server.HtmlEncode(CC(4)) & "</TD></tr>" & vbCrLf
- Next
- Application.Unlock
- If Request("cc") = "showuser" Then
- Response.Write "</table><meta http-equiv='refresh' content='20'>" & vbCrLf
- Response.End
- End If
- Function SaveToApp() '保存数据到内存
- Application(IP0) = CC(0) & vbCrLf & CC(1) & vbCrLf & CC(2) & vbCrLf & BrowX & vbCrLf & GetFullUrl()
- End Function
- Function GetFullUrl() '获得完好URL地址
- If Request.QueryString <> "" Then
- GetFullUrl = "http://" & Request.ServerVariables("HTTP_HOST") & Request.ServerVariables("SCRIPT_NAME") & "?" & Request.QueryString
- Else
- GetFullUrl = "http://" & Request.ServerVariables("HTTP_HOST") & Request.ServerVariables("SCRIPT_NAME")
- End If
- GetFullUrl = Replace(GetFullUrl, vbCrLf, "")
- End Function
- Function BanIPMsg() 'IP 被封时显示的信息
- Response.Clear
- Dim LeftTime
- LeftTime = CC(0) - DateDiff("S", CC(2), Now) '计算剩余时间
- %>
- 你的拜候频率太快,请不要快速革新页面大概尝试CC攻击!<br><br>
- 你的IP地址将于 <font color='#FF0000' id="tick"><%=LeftTime%></font> 秒后解封,在此期间你不能拜候本站任何页面,届时本页面会自动革新!
- <script type="text/javascript">
- var i = <%=LeftTime%>;
- var intervalid;
- intervalid = setInterval("fun()", 1000);
- function fun() {
- if (i == 0) {
- clearInterval(intervalid);
- location.reload()
- }
- document.getElementById("tick").innerHTML = i;
- i--
- }
- </script>
- <script>alert('你的拜候频率太快,请不要快速革新页面大概尝试CC攻击!')</script>
- <%
- Response.End
- End Function
- %>
摘自http://lcx.cc/?FoxNews=2094.html
以上是“Asp 防备CC攻击模块 (Anti-CC.asp)[网站编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论