网站安全之防范CC攻击
用户评价: / 26
好 
作者:深圳网站建设   
周三, 2009年 12月 09日 21:32

假如攻击者拥有一个流量巨大的网站,这个网站的流量,很可能是他花钱买回来的,当然也可能是他控制的肉鸡,在控制的肉鸡上面访问他的网站。黑客的网站首页 非常简单,但是在他的源代码中,却隐藏了达到上百个<iframe>标签。对!聪明的你,应该想得出他的<iframe>标签里 面放的是什么了吧?没错!他的<iframe>里面,放的就是他要攻击的网站的地址。
举一个例子来说明一下攻击者的威力,假设黑客的网站是remexsky.com,你的网站是yfs8.com。如果有人在163的首页代码中,有这么一 段:<iframe src="http://remexsky.com" border="0" width="0" height="0"></iframe>,那么在所有人访问163的主页时,也会不知不觉的访问http: //remexsky.com。然后http://remexsky.com的 首页中可能有100个如下的代码:<iframe src=http://yfs8.com border="0" width="0" height="0"></iframe>,当然他还可能放上yfs8.com这个网站十个甚至更多不同的地址。那就表明:凡是有一个人 访问了163,就可能会访问yfs8.com十次。以每秒300个请求来说,一天就是25920000个请求,再加上页面上的图片和其它文件等,估计就是上 亿个请求了。1天上亿个请求,普通的网站受得了吗?有很多被攻击的网站用的是虚拟主机,每秒不到100个连接可能就无法提供服务了。即使是那种单独几台服 务器的网站,也根本就无法承受!即使WEB Server可以承受,那带宽呢?即使带宽可以承受,那么Db Server呢?
        朋友的网站就受到此种攻击,他试着将网站转移到他朋友的服务器上面,当然最后的结果还是照样拖累他朋友的服务器瘫痪。
        这种就是是典型的CC攻击。CC攻击比DDOS攻击更可怕的就是,CC攻击一般是硬防很难防止住的。
为什么呢?
一、因为CC攻击来的IP都是真实的,分散的;
二、CC攻击的数据包都是正常的数据包;
三、CC攻击的请求,全都是有效的请求,无法拒绝的请求。
        其实只要仔细研究了一下这种攻击的模式,发现这种攻击,理论上是可以防止的,即只要通过有效的手段,完全可以将危害降低到最轻。因为这种攻击有一个 致命的弱点。它致命的弱点在哪里呢?当然就是在<iframe>上面。通过<iframe>进行CC攻击,攻击者的想法和创意, 确实很让人惊叹,但这正好造成了他的完美失败。熟悉网页程序的朋友应该都知道,用<iframe>嵌入的网页,自然都会有 HTTP_REFERER值,而有了这个值,从这个值上面屏蔽或是转发掉来源的网站即可。也就是说,你可以访问我,但是我不将真实的页面返回给你,我可以 把你随意打发掉,或是将你随意转到另外一个网站上去(如:公安部?哈哈,我就见过有人类似这样做的),这样我就可以大量的节省我的带宽、我的DB Server资源、我的Web Server资源。你最多就是占用了我大量的TCP连接罢了。

        下面贴一段Web server的配置代码,用于解决此类攻击:
        valid_referers none blocked server_names google.com google.cn *.google.com *.google.cn baidu.com *.baidu.com *.你自己的域名(在这里还可以加入其他的,比如说SOSO,YAHOO,SOGOU YOUDAO等);
if ($invalid_referer) {
        return   404;
        }

 

asp代码:

 <%
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 "系统维护中"
%>

 

 上面的代码,很简单的设置了,只要不是HTTP_REFERER来源于上面设置网址来源的请求,通通转发至404。

 

 

评论信息

分享到: