>  기사  >  백엔드 개발  >  PHP는 CC 공격 코드를 방지합니다. PHP는 웹 페이지의 빈번한 새로 고침을 방지합니다._php 팁

PHP는 CC 공격 코드를 방지합니다. PHP는 웹 페이지의 빈번한 새로 고침을 방지합니다._php 팁

WBOY
WBOY원래의
2016-05-16 20:02:31952검색

웹 페이지가 악의적으로 빠르게 새로 고쳐집니다. cc 공격은 공격자가 프록시 서버를 사용하여 대상 사이트로 향하는 합법적인 요청을 생성하여 여러 사용자가 피해자 웹 사이트에 지속적으로 액세스하도록 시뮬레이션하는 것입니다. 특히 많은 양이 필요한 페이지에 액세스합니다. 많은 양의 CUP 시간이 필요하며 결국 충돌이 발생할 때까지 대상 웹 사이트 서버 리소스가 소진됩니다. 이로 인해 CPU가 오랫동안 100% 상태가 됩니다. 네트워크가 정체되어 정상적인 접속이 차단될 때까지 항상 연결이 완료되지 않습니다. 우리는 이를 CC 공격이라고 부릅니다. 이를 달성하기 위해 일부 공격 방지 소프트웨어를 사용할 수 있지만 효과가 명확하지 않은 경우도 있습니다.

아래에서는 CC 공격을 어느 정도 예방할 수 있는 PHP 코드를 제공합니다.
주요 기능: 3초 내에 5회 이상 페이지를 계속해서 새로 고치면 이 머신을 가리킵니다 http://127.0.0.1
CC 공격을 방지해야 하는 페이지에 이 코드를 넣으면 됩니다.
소스코드

<&#63;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;
} 
&#63;>

다음은 PHP에서 CC 공격을 방지하는 효과적인 방법입니다.

1.세션 기록
submit.php는 전송 페이지입니다. 이 페이지에 세션 변수를 설정하여 submitdeal.php 페이지에 숨겨진 필드와 양식으로 보냅니다. 서버 측에서 게시된 숨겨진 변수와 서버 측에 기록된 세션 변수를 비교합니다. 예를 들어 두 값이 동일하면 데이터베이스에 쓰고 세션을 지우고 사용자가 페이지를 새로 고치면 두 값이 같지 않으면 오류가 발생하거나 점프하라는 메시지가 표시됩니다.
장점: 사용자가 인증 코드를 입력할 필요가 없습니다
단점: 양식 복사가 용이함
2.인증코드
세션 데이터를 숨겨진 필드로 제출하지 않고 사용자가 입력하도록 하는 점만 제외하면 원칙은 첫 번째와 동일합니다. 대부분의 웹사이트에서는 텍스트 인증코드와 사진 인증코드, 사진을 사용합니다. 인증 코드는 매우 안전합니다.

3.IP 바인딩
데이터를 제출한 후 먼저 IP 테이블에서 클라이언트 IP를 검색합니다. 클라이언트 IP가 존재하고 만료되지 않은 경우 오류가 보고됩니다. 그런 다음 객실 IP가 검색됩니다. 데이터베이스에 기록됩니다.
4.cookie:클라이언트가 제출한 후 처리 프로그램은 먼저 클라이언트가 쿠키를 설정했는지 검색합니다. 쿠키가 설정되어 있지 않으면 다시 제출하지 않고 데이터를 작성한 다음 쿠키를 작성합니다. ;
예:

사용자의 무의미한 잦은 점프와 요청은 서버에 많은 부담을 주게 됩니다. 실제로 쿠키를 사용하면 이를 방지할 수 있습니다.

<&#63;php 
error_reporting(0); 
//if($_COOKIE["ck"])die("刷新过快!"); 
if($_COOKIE["ck"])header("Location:http://www.baidu.com");//这里如果用户刷新过快,给予终止php脚本或者直接302跳转 
setcookie("ck","1",time()+3);//设定cookie存活时间3s 
echo "hello!"; 
&#63;>

방법 1:

<&#63;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;  
}  
&#63;> 

방법 2:

<&#63; 
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); 
&#63;> 
<form method="post" name="magic" action="f5.php"><input type="hidden" 
name="tag" value="<&#63;=$v&#63;>"><input type=text name="name"><input type="submit" value="submit"> 
</form> 
<&#63; 
echo $v; 
$_SESSION[status] = $v; 
&#63;> 

방법 3:

<&#63; 
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); 
&#63;> 
<form method="post" name="magic" action="f5.php"><input type="hidden" 
name="tag" value="<&#63;=$v&#63;>"><input type=text name="name"><input type="submit" value="submit"> 
</form> 
<&#63; 
echo $v; 
$_SESSION[status] = $v; 
&#63;> 

위 내용은 PHP가 CC 공격을 방지하는 다양한 방법입니다. 웹 페이지의 빠르고 악의적인 새로 고침을 방지하는 데 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.