我使用JSP写了个网站,天天遭别人CC攻击,CC攻击就是使用好几千的代理IP模仿去刷你的网站页面,造成网站并发访问量承受不了我想知道,jsp里有没有什么方法,代码,判断刷新打开我的网站的IP是代理IP的,我就不让他登陆,有没有什么好的方法,好的代码方法,我不胜感谢中!!!!!!!!!!!!!!!!!!!!!!!

解决方案 »

  1.   

    session里加计数器,超过一定数量,禁止访问
      

  2.   

    session里加计数器不太好啊,我的意思是如何判断别人是使用代理IP来访问的,有没有这种方法和函数
      

  3.   

    CC攻击:利用大量代理服务器对目标计算机发起大量连接,导致目标服务器资源枯竭造成拒绝服务。基本原理就是:攻击发起主机(attacker host) 多次通过 网络中的HTTP代理服务器(HTTP proxy) 向目标主机(target host) 上开销比较大的CGI页面发起HTTP请求造成目标主机拒绝服务( Denial of Service ) 
    这是一种比较创新的分布式拒绝服务攻击( Distributed Denial of Service )与典型的分布式拒绝服务攻击不同 攻击者不需要去寻找大量的傀儡机代理服务器充当了这个角色 .纠正常见的错误看法:
    1、利用HTTP PROXY不单单能攻击HTTP服务器针对其它TCP服务端口一样有效。
    2、被攻击的服务器通过简单的屏蔽代理端口是无丝毫意义的。假设代理服务器的服务端口是8080、代理服务器接到请求去代理访问服务器的时候使用的请求端口不可能是8080啦。
    解决CC的切入点:
    1、大部分的HTTP代理服务器代理源client向服务器发出的数据包带有"XForwarded-For"特征。
    2、针对CC攻击非HTTP端口的时候可以通过过滤HTTP请求特有的"GET"特征进行过滤。
    3、对付CC攻击,区别非正常连接要在代理服务器和被攻击的服务器完成三次握手进行数据通讯的时候进行检测。检测出后要及时关闭服务器相应的非正常连接。否则同样可能因死连接过多造成服务器资源枯竭。
    4、限制单位时间内同一请求IP的病发连接数也不失为一种好的办法。
    5、大部分代理服务器会向服务器报露源请求的源IP地址,只不过这个地址经常是反的例如202.96.140.77你收到所的数据包可能变成77.140.96.202,这可能是程序员没有将网络字节序转换成主机字节序放在HTTP请求信息里所致。找出什么IP攻击你解决办法要你自己想。
    防范方法  方法是通过页面的编写实现防御。  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
    end if
    set tsObject = fsoObject.OpenTextFile(file,8)
    tsObject.Writeline Request.ServerVariables("HTTP_X_FORWARDED_FOR")&"["&Request.ServerVariables("REMOTE_ADDR")&"]"&now()
    Set fsoObject = Nothing
    Set tsObject = Nothing
    response.write "有代理访问"
    %>
      这样会生成CCLog.txt,它的记录格式是:真实IP [代理的IP] 时间,看看哪个真实IP出现的次数多,就知道是谁在攻击了。将这个代码做成Conn.asp文件,替代那些连接数据库的文件,这样所有的数据库请求就连接到这个文件上,然后马上就能发现攻击的人。  4. 还有一个方法就是把需要对数据查询的语句做在Redirect后面,让对方必须先访问一个判断页面,然后Redirect过去。  5. 在存在多站的服务器上,严格限制每一个站允许的IP连接数和CPU使用时间,这是一个很有效的方法。  CC的防御要从代码做起,其实一个好的页面代码都应该注意这些东西,还有SQL注入,不光是一个入侵工具,更是一个DDOS缺口,大家都应该在代码中注意。举个例子吧,某服务器,开动了5000线的CC攻击,没有一点反应,因为它所有的访问数据库请求都必须一个随机参数在Session里面,全是静态页面,没有效果。突然发现它有一个请求会和外面的服务器联系获得,需要较长的时间,而且没有什么认证,开800线攻击,服务器马上满负荷了。
       
      代码层的防御需要从点点滴滴做起,一个脚本代码的错误,可能带来的是整个站的影响,甚至是整个服务器的影响,慎之!以上所讲的不一定能帮助普通用户解决实际问题,以下给普通用户一些简单的解决提示:
    1、linux的iptables可以配置字符串模式匹配,也就是可以利用iptables实现 解决CC的切入点1、2。将linux配置为桥模式实现对被攻击的非linux服务器保护。
    2、很多unix防火墙都带了限制单一ip并发数的功能。例如ipfw
    3、如果是针对WEB网站攻击可以采取一些退让的办法比方说域名转向(把负载交给域名转向服务商)。也可以通过反响代理或者dns轮询提高web服务整体承受能力。顺便说一下:字符串匹配本身就是一个开销很大的工作,iptables用来解决CC攻击性能上并不是非常的出色。我可以给一些有开发能力的用户一些提示,以上提及的关键字均出现在三次握手结束后的第四次数据通讯中,且均在TCP数据部分的前255bytes。解决办法自己视能力想去...........
      
    这是ASP的防范方法
    我的网站是JSP的,JSP要写什么代码来预防啊
      

  4.   

    在JSP中使用筛选器filter,对来源IP进行限制单位时间内的请求数,超过则进行限制。
      

  5.   

    在JSP中使用筛选器filter,对来源IP进行限制单位时间内的请求数,超过则进行限制。
    不明白啊
      

  6.   

    我的服务器是Windows2000   tomcat的根据单位时间内同一IP来访问,要如何作比较方便