网页快速恶意刷新,cc攻击就是攻击者利用代理服务器生成指向目标站点的合法请求,模拟多用户不停的对受害网站进行访问,特别是访问那些需要大量数据操作需要大量CUP时间的页面,最终导致目标网站服务器资源耗尽,一直到宕机崩溃,如此一来,造成服务器资源的浪费,CPU长时间处于100%,永远都有处理不完的连接直至就网络拥塞,正常的访问被中止。我们称之为CC攻击。尽管我们可以借助于一些防攻击的软件来实现,不过效果有时并不明显。
下面我提供一段PHP的代码,可以起到一定的防CC攻击效果。
主要功能:在3秒内连续刷新页面5次以上将指向本机 http://127.0.0.1
只需将该代码放到需要防CC攻击的页面即可。
源码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<?php
$timestampcc = time();
$cc_nowtime = $timestampcc ;
if (session_is_registered( 'cc_lasttime' )){
$cc_lasttime = $_SESSION [ 'cc_lasttime' ];
$cc_times = $_SESSION [ 'cc_times' ]+1;
$_SESSION [ 'cc_times' ] = $cc_times ;
} else {
$cc_lasttime = $cc_nowtime ;
$cc_times = 1;
$_SESSION [ 'cc_times' ] = $cc_times ;
$_SESSION [ 'cc_lasttime' ] = $cc_lasttime ;
}
if (( $cc_nowtime - $cc_lasttime )<3){ //3秒内刷新5次以上可能为cc攻击
if ( $cc_times >=5){
echo '刷新太快!' ;
exit ;
}
} else {
$cc_times = 0;
$_SESSION [ 'cc_lasttime' ] = $cc_nowtime ;
$_SESSION [ 'cc_times' ] = $cc_times ;
}
?>
|
下面是为大家整理的PHP防CC攻击的有效方法:
1.session记录
submit.php为发送页面,在这个页面上设置一个session变量,并作为隐藏域和表单一起发送到submitdeal.php页面,在服务器端把post上来的隐藏变量和服务器端记录的session变量进行对比,比如一样,则写入数据库并清除session,这样用户刷新页面,两个值不相等提示错误或跳转。
优点:不用用户输入验证码
缺点:表单容易被复制
2.验证码
原理和第一种一样,只是session数据不作为隐藏域提交,而是让用户填写,大多数网站都采用文字验证码和图片验证码,图片验证码安全性高。
3.IP绑定
提交数据后,先从IP表里检索客户端IP,如果有,并且没有过期,那么报错,否则写入数据库,然后再取客房端IP,把IP写入数据库。
4.cookie:客户提交后处理程序先检索客户端有没有设置cookie,如果有,则不重复提交;如果没有,则写数据,再写个cookie;
例:
用户无意义的频繁跳转、请求都会给服务器加重很多负担 其实 用cookie就可以防止这一点。
1
2
3
4
5
6
7
|
<?php
error_reporting (0);
//if($_COOKIE["ck"])die("刷新过快!");
setcookie( "ck" , "1" ,time()+3); //设定cookie存活时间3s
echo "hello!" ;
?>
|
方式一:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<?php
session_start();
$k = $_GET [ 'k' ];
$t = $_GET [ 't' ];
$allowTime = 1800; //防刷新时间
$ip = get_client_ip();
$allowT = md5( $ip . $k . $t );
if (!isset( $_SESSION [ $allowT ]))
{
$refresh = true;
$_SESSION [ $allowT ] = time();
} elseif (time() - $_SESSION [ $allowT ]> $allowTime ){
$refresh = true;
$_SESSION [ $allowT ] = time();
} else {
$refresh = false;
}
?>
|
方式二:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<?
session_start();
if (!emptyempty( $_POST [name])){
$data = $_POST [name];
$tag = $_POST [tag];
if ( $_SESSION [status]== $tag ){
echo $data ;
} else {
echo "不允许刷新!" ;
}
}
$v = mt_rand(1,10000);
?>
<form method= "post" name= "magic" action= "f5.php" ><input type= "hidden"
name= "tag" value= "<?=$v?>" ><input type=text name= "name" ><input type= "submit" value= "submit" >
</form>
<?
echo $v ;
$_SESSION [status] = $v ;
?>
|
方式三:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<?
session_start();
if (!emptyempty( $_POST [name])){
$data = $_POST [name];
$tag = $_POST [tag];
if ( $_SESSION [status]== $tag ){
echo $data ;
} else {
echo "不允许刷新!" ;
}
}
$v = mt_rand(1,10000);
?>
<form method= "post" name= "magic" action= "f5.php" ><input type= "hidden"
name= "tag" value= "<?=$v?>" ><input type=text name= "name" ><input type= "submit" value= "submit" >
</form>
<?
echo $v ;
$_SESSION [status] = $v ;
?>
|
以上就是php防止CC攻击的多种方式,希望能帮助大家防止网页快速恶意刷新。