>  기사  >  백엔드 개발  >  PHP에서 양식을 반복적으로 제출하는 것을 방지하는 방법

PHP에서 양식을 반복적으로 제출하는 것을 방지하는 방법

王林
王林원래의
2019-12-05 11:14:512959검색

PHP에서 양식을 반복적으로 제출하는 것을 방지하는 방법

토큰의 가장 큰 특징은 무작위성과 예측 불가능성입니다.

토큰은 일반적으로 반복적인 양식 제출과 안티 csrf 공격(교차 사이트 요청 위조)을 방지하기 위해 두 가지 위치에서 사용됩니다.

둘 다 session token를 통해 원칙적으로 달성됩니다. 클라이언트가 페이지를 요청하면 서버는 임의의 숫자 토큰을 생성하고 세션에 토큰을 배치한 다음 클라이언트에 토큰을 보냅니다(보통 숨겨진 양식을 구성하여). 다음에 클라이언트가 요청을 제출하면 토큰이 양식과 함께 서버에 제출됩니다.

"반복 양식 제출 방지"를 적용하면 서버 측의 첫 번째 검증 후 세션의 토큰 값이 업데이트됩니다. 사용자가 반복적으로 제출하면 양식을 제출했기 때문에 두 번째 검증 판단이 실패합니다. 사용자에 의해 세션의 토큰은 변경되지 않았지만 서버 측 세션의 토큰은 변경되었습니다.

온라인 비디오 튜토리얼 공유: php 비디오 튜토리얼

PHP 양식에 토큰을 추가하여 반복 제출을 방지하세요

원칙은 임의의 문자열을 생성하여 양식을 제출한 후 세션에 넣는 것입니다. 이 문자열을 확인하면 다른 사람이 그렇게 하는 것을 방지할 수 있습니다. 제출을 속이고 제출을 반복하거나 제출을 두 번 클릭하려면 자신만의 양식을 작성하세요.

간단한 구현(참고용):

<?php
/*
* PHP简单利用token防止表单重复提交

* 此处理方法纯粹是为了给初学者参考
*/

session_start();

function set_token() {

  $_SESSION[&#39;token&#39;] = md5(microtime(true));

}

function valid_token() {

  $return = $_REQUEST[&#39;token&#39;] === $_SESSION[&#39;token&#39;] ? true : false;

  set_token();

  return $return;

}

//如果token为空则生成一个token

if(!isset($_SESSION[&#39;token&#39;]) || $_SESSION[&#39;token&#39;]==&#39;&#39;) {

  set_token();

}

if(isset($_POST[&#39;test&#39;])){

  if(!valid_token()){

    echo "token error";

  }else{

    echo &#39;成功提交,Value:&#39;.$_POST[&#39;test&#39;];

  }

}

?>

<form method="post" action="">

  <input type="hidden" name="token" value="<?php echo $_SESSION[&#39;token&#39;]?>">

  <input type="text" name="test" value="Default">

  <input type="submit" value="提交" />

</form>

추천 관련 기사 및 튜토리얼: php 튜토리얼

위 내용은 PHP에서 양식을 반복적으로 제출하는 것을 방지하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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