Maison  >  Article  >  développement back-end  >  php interdit aux utilisateurs de soumettre des formulaires à plusieurs reprises

php interdit aux utilisateurs de soumettre des formulaires à plusieurs reprises

藏色散人
藏色散人original
2020-08-13 10:55:162061parcourir

Comment implémenter l'interdiction des soumissions répétées en PHP : effectuez d'abord des restrictions depuis le front-end ; puis effectuez une redirection de page après la soumission, puis créez des contraintes d'index uniques dans la base de données et enfin vérifiez le jeton de session ;

php interdit aux utilisateurs de soumettre des formulaires à plusieurs reprises

Recommandé : "Tutoriel vidéo PHP"

Lorsque nous soumettons le formulaire, nous ne pouvons pas l'ignorer La restriction vise à empêcher les utilisateurs de soumettre le formulaire à plusieurs reprises, car il est possible que l'utilisateur clique continuellement sur le bouton de soumission ou que l'attaquant soumette des données de manière malveillante. Nous aurons alors des problèmes lors du traitement après la soumission des données, comme la modification ou l'ajout de données. données à la base de données.

Alors, comment éviter le phénomène de soumission répétée de formulaires ? Nous pouvons commencer par plusieurs aspects :

Tout d'abord, définir des restrictions sur le front-end. Le JavaScript frontal est désactivé après avoir cliqué une fois sur le bouton. Cette méthode empêche simplement les clics multiples sur le bouton de soumission, mais l'inconvénient est qu'elle ne fonctionnera pas si l'utilisateur désactive le script JavaScript.

Deuxièmement, nous pouvons rediriger la page après la soumission, c'est-à-dire passer à une nouvelle page après la soumission. Cela évite principalement les soumissions F5 répétées, mais cela présente également des inconvénients.

Troisièmement, la base de données a des contraintes d'index uniques.

La quatrième consiste à vérifier le jeton de session.

Apprenons maintenant une méthode simple d'utilisation du jeton de session pour empêcher la soumission répétée de formulaires.

Nous ajoutons un champ de saisie masqué dans le formulaire, c'est-à-dire type="hidden", dont la valeur est utilisée pour enregistrer la valeur du jeton. Lorsque la page est actualisée, la valeur du jeton changera. il est jugé si la valeur du jeton est correcte, si le jeton soumis dans le frontend ne correspond pas au jeton soumis dans le backend, il est considéré comme une soumission en double.

< ?php
/
 
 PHP简单利用token防止表单重复提交 */
session_start();
header("Content-Type: text/html;charset=utf-8");
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;web&#39;])){
if(!valid_token()){
echo "token error,请不要重复提交!";
}else{
echo &#39;成功提交,Value:&#39;.$_POST[&#39;web&#39;];
}
}else{
?>
}
?>

Ce qui précède est un exemple simple pour éviter l'envoi répété de formulaires.

Dans le développement réel du projet, le jeton de formulaire sera traité de manière plus complexe, ce que nous appelons la vérification du jeton. Le traitement possible comprend : la vérification du domaine source, c'est-à-dire l'origine, s'il s'agit d'une soumission externe ; la correspondance avec l'action à effectuer, qu'il s'agisse d'un ajout, d'une modification ou d'une suppression ; la deuxième et la plus importante est de construire un jeton ; qui peut utiliser un algorithme de cryptage réversible. Cela pourrait être compliqué car le texte en clair n'est toujours pas sécurisé.

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