>백엔드 개발 >PHP 튜토리얼 >악의적인 새로 고침을 방지하는 PHP 방법 및 티켓 사기_php 팁

악의적인 새로 고침을 방지하는 PHP 방법 및 티켓 사기_php 팁

WBOY
WBOY원래의
2016-05-16 20:30:581131검색

이 기사의 예에서는 PHP가 악의적인 새로 고침 및 티켓 사기를 방지하는 방법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 구현 방법은 다음과 같습니다.

일반적으로 악성 새로고침이란 제출 페이지를 지속적으로 새로 고쳐서 대량의 유효하지 않은 데이터가 발생하는 것을 의미합니다. PHP에서 악성 페이지 새로 고침을 방지하는 방법을 요약해 보겠습니다.

악성 페이지 브러싱 방지 원칙은

페이지 간에 전달되는 확인 문자열이 필요합니다.
페이지 생성 시 문자열
을 무작위로 생성합니다. 모든 연결에서 필수 매개변수로 전달됩니다. 동시에 이 문자열을 세션에 저장하십시오.
링크나 양식을 클릭하여 페이지에 진입한 후 세션에 입력된 인증번호가 사용자가 제출한 인증번호와 동일한지 판단하여 동일하지 않은 경우 처리합니다. 반복된 새로고침으로 간주됩니다.
처리가 완료되면 새 페이지 생성을 위한 인증코드가 다시 생성됩니다

PHP 구현 코드는 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.
세션_시작()
$k=$_GET['k']
$t=$_GET['t']
$allowTime = 1800;//새로 고침 방지 시간
$ip = get_client_ip()
$allowT = md5($ip.$k.$t)
if(!isset($_SESSION[$allowT]))
{
$새로고침 = 참
$_SESSION[$allowT] = 시간()
}elseif(time() - $_SESSION[$allowT]>$allowTime){
$새로고침 = 참
$_SESSION[$allowT] = 시간()
}그밖에{
$새로고침 = 거짓
}
?>

IE6에서도 제출이 두 번 발생했습니다. 제출 대신 그림을 사용할 때 발생하는 현상입니다. 제출 버튼만 누르면 제출이 됩니다. 두 번 제출하는 상황. 이제 정리해보자:
방법은 기본적으로 이전과 동일합니다

수신된 2.php 페이지는 두 부분으로 나누어져 있는데, 한 부분은 제출된 변수를 처리하고, 다른 부분은 페이지를 표시합니다
변수 처리 후 헤더( "location: ".$_SERVER[ 'PHP_SELF '])를 사용하여 해당 페이지로 이동합니다.
이 부분은 판단이 필요합니다. post 변수가 없으면 건너뛰세요. 물론 다른 페이지로 이동할 수도 있습니다.
다른 페이지로 이동했다가 돌아올 때 문제가 발생할 수 있으므로 PHP 파일에서 수행하는 것이 좋습니다.

이전 페이지를 통해 전달된 변수가 요구 사항을 충족하지 않는 경우 <script>history.go(-1)</p>로 강제 반환할 수 있습니다. <p> 방금 일반적인 생각에 대해 이야기했습니다. 아마도 전문가는 그런 문제에 직면하지 않을 것입니다. 그러나 모든 사람이 전문가는 아닙니다. <br> </p> <div class="codetitle"> <span><a style="CURSOR: pointer" data="70221" class="copybut" id="copybut70221" onclick="doCopy('code70221')"><u>코드 복사</u></a></span> 코드는 다음과 같습니다.</div> <div class="codebody" id="code70221">if(isset($_POST)) <br> { <br> if(변수가 요구 사항을 충족하지 않음) <br> <script> 역사.go(-1) <br> 그렇지 않으면 <br> //작업 데이터 <br> ... <br> if (작업 완료) <br> 헤더( "위치: ".$_SERVER[ 'PHP_SELF ']); } <br> <스크립트 언어= "자바스크립트 "> <!-- <br /> javascript:window.history.forward(1) <br /> //--> <br><br> <br>쿠키를 사용</div>할 수도 있습니다. <br><strong><br></strong><div class="codetitle">코드 복사<span><a style="CURSOR: pointer" data="48195" class="copybut" id="copybut48195" onclick="doCopy('code48195')"><u> 코드는 다음과 같습니다.</u></a><?php</span> $c_file="counter.txt"; //변수에 파일명 지정</div> if(!file_exists($c_file)) //파일이 존재하지 않는 경우의 동작<div class="codebody" id="code48195"> {<br /> $myfile=fopen($c_file,"w"); //파일 생성<br /> fwrite($myfile,"0"); //"0" 위치<br /> fclose($myfile); //파일 닫기<br /> }<br /> $t_num=file($c_file); //파일 내용을 변수로 읽어옵니다<br /> if($_COOKIE["date"]!="date(Y year m Month d day)") //COOKIE 내용이 현재 날짜와 일치하는지 판단<br /> {<br /> $t_num[0]; //원래 데이터가 1씩 증가합니다<br /> $myfile=fopen($c_file,"w"); //쓰기 모드로 파일 열기<br /> fwrite($myfile,$t_num[0]); //새 값 쓰기<br /> fclose($myfile); //파일 닫기<br /> //현재 날짜를 COOKIE에 다시 쓰고 COOKIE의 유효기간을 24시간으로 설정합니다<br /> setcookie("date","date(Y 년 m 월 d 일)",time() 60*60*24);<br /> }<br /> ?><br><br> <br>사용 세션: </span> </div> <br>메인 페이지 파일 index.php 코드: <strong> <br></strong><br><div class="codetitle">코드 복사<span><a style="CURSOR: pointer" data="87716" class="copybut" id="copybut87716" onclick="doCopy('code87716')"><u> 코드는 다음과 같습니다.</u><div class="codebody" id="code87716"> <?php <br /> session_start();<br> ?><br> <html><br> <br> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"><br> <title>세션을 통한 페이지 새로 고침 비활성화</title><br> <style type="text/css"><br> <!--<br /> .style1 {<br /> 글꼴 크기: 14px;<br /> 글꼴 모음: "중국 송나라 모방";<br /> 글꼴 두께: 굵게;<br /> }<br /> .style2 {font-family: "중국 호박색"}<br /> --><br> </스타일><br> </머리><br> <br> <?php<br> //텍스트를 사용하여 데이터 저장<br> If($_SESSION[임시]==""){<br> if(($fp=fopen("counter.txt","r"))==false){ <br> echo "파일을 열지 못했습니다!";<br> }else{ $counter=fgets($fp,1024); //파일의 데이터를 읽습니다<br> fclose($fp); //텍스트 파일 닫기<br>                                                   $fp=fopen("counter.txt","w"); //글쓰기로 텍스트 파일 열기 <br> <br> fputs($fp,$counter); //새 통계를 1만큼 증가<br> fclose($fp) }                                                        //텍스트 파일에서 통계 데이터 읽기<br> If(($fp=fopen("counter.txt","r"))==false){<br> echo "파일을 열지 못했습니다!";<br>         }그 외{<br>           $counter=fgets($fp,1024);<br>            fclose($fp);<br>                             echo "디지털 카운터: " .$counter ;<br> } } //방문수 출력<br> $_SESSION[temp]=1; //로그인 후 $_SESSION[temp] 값이 비어 있지 않은 경우 $_SESSION[temp]에 1<br> 값을 할당합니다. }그밖에{<br> echo "<script>alert('이 페이지를 새로 고칠 수 없습니다!!'); History.back();</script>";
}
?>












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

​​​ echo "파일을 열지 못했습니다!";
}그밖에{
          $counter=fgets($fp,1024);
           fclose($fp);
                                                                   with with with with echo "웹페이지 방문수: " .$counter; } } //방문수 출력
?>