Maison  >  Article  >  développement back-end  >  Comment empêcher la soumission répétée de formulaires en php

Comment empêcher la soumission répétée de formulaires en php

王林
王林original
2019-12-05 11:14:512960parcourir

Comment empêcher la soumission répétée de formulaires en php

Le jeton est un jeton. Sa plus grande caractéristique est le caractère aléatoire et l'imprévisibilité.

Le jeton est généralement utilisé à deux endroits : pour empêcher les soumissions répétées de formulaires et les attaques anti-csrf (falsification de requêtes intersites).

Les deux sont mis en œuvre en principe via session token. Lorsque le client demande une page, le serveur génère un jeton à nombre aléatoire, place le jeton dans la session, puis envoie le jeton au client (généralement en construisant un formulaire caché). La prochaine fois que le client soumettra une demande, le jeton sera soumis au serveur avec le formulaire.

Si elle est appliquée pour « empêcher la soumission répétée du formulaire », une fois que la première vérification est la même du côté du serveur, la valeur du jeton dans la session sera mise à jour. Si l'utilisateur soumet à plusieurs reprises, le deuxième jugement de vérification échouera. car le jeton sous la forme soumise par l'utilisateur n'a pas changé, mais le jeton dans la session côté serveur a changé.

Partager des didacticiels vidéo en ligne : Tutoriel vidéo php

Ajouter un jeton au formulaire php pour éviter les soumissions répétées

Le principe est pour générer un aléatoire La chaîne est placée dans la session. Cette chaîne est vérifiée après la soumission du formulaire. Cela peut empêcher d'autres personnes d'écrire le formulaire eux-mêmes pour tricher sur la soumission, répéter la soumission ou double-cliquer sur la soumission.

Implémentation simple (pour référence uniquement) :

<?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>

Tutoriels d'articles connexes recommandés : Tutoriel php

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn