Heim  >  Artikel  >  php教程  >  PHP verhindert, dass Benutzer wiederholt Formulare senden

PHP verhindert, dass Benutzer wiederholt Formulare senden

大家讲道理
大家讲道理Original
2016-11-09 09:26:421328Durchsuche

Wenn wir das Formular absenden, besteht eine nicht zu ignorierende Einschränkung darin, zu verhindern, dass Benutzer das Formular wiederholt absenden, da es möglich ist, dass der Benutzer kontinuierlich auf die Schaltfläche „Senden“ klickt oder der Angreifer in böswilliger Absicht Daten übermittelt Durch die Übermittlung, beispielsweise durch Ändern oder Hinzufügen, gelangen die Daten in die Datenbank.

Wie kann man also das Phänomen der wiederholten Formularübermittlung vermeiden? Wir können von vielen Aspekten ausgehen:
Nehmen Sie zunächst Einschränkungen am Frontend vor. Das Front-End-JavaScript wird deaktiviert, nachdem die Schaltfläche einmal angeklickt wurde. Diese Methode verhindert lediglich mehrere Klicks auf die Schaltfläche „Senden“. Der Nachteil besteht jedoch darin, dass sie nicht funktioniert, wenn der Benutzer das JavaScript-Skript deaktiviert.
Zweitens können wir die Seite nach der Übermittlung umleiten, dh nach der Übermittlung zu einer neuen Seite springen. Dies vermeidet hauptsächlich wiederholte F5-Übermittlungen, weist jedoch auch Mängel auf.
Drittens ist die Datenbank eine eindeutige Indexbeschränkung.
Der vierte Schritt besteht darin, das Sitzungstoken zu überprüfen.
Schauen wir uns nun eine einfache Methode zur Verwendung eines Sitzungstokens an, um das wiederholte Senden von Formularen zu verhindern.
Wir fügen dem Formular ein ausgeblendetes Eingabefeld hinzu, d. h. type="hidden", dessen Wert zum Speichern des Tokenwerts verwendet wird. Wenn die Seite aktualisiert wird, ändert sich der Tokenwert Beurteilt, ob der Token-Wert korrekt ist. Wenn der übermittelte Token nicht mit dem Hintergrund übereinstimmt, wird dies als doppelte Übermittlung betrachtet.

< ?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{ 
?>  
    <form method="post" action="">  
    <input type="hidden" name="token" value="<?php echo $_SESSION[&#39;token&#39;]?>">  
    <input type="text" class="input" name="web" value="www.jb51.net">  
    <input type="submit" class="btn" value="提交" />  
    </form> 
<?php 
} 
?>  

Das Obige ist ein einfaches Beispiel, um eine wiederholte Formularübermittlung zu verhindern.
In der tatsächlichen Projektentwicklung wird das Formular-Token dann auf komplexere Weise verarbeitet, was wir als Token-Verifizierung bezeichnen. Mögliche Bearbeitung Es gibt: Überprüfen der Quelldomäne, dh des Ursprungs, ob es sich um eine externe Übermittlung handelt, d. h. Hinzufügen, Ändern oder Löschen. Die zweite und wichtigste Sache ist die Erstellung eines Tokens Verwenden Sie einen reversiblen Verschlüsselungsalgorithmus. Seien Sie so komplex wie möglich, da Klartext immer noch unsicher ist.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn