Heim  >  Artikel  >  Backend-Entwicklung  >  So fügen Sie einem PHP-Formular ein Token hinzu, um wiederholte Übermittlungen zu verhindern

So fügen Sie einem PHP-Formular ein Token hinzu, um wiederholte Übermittlungen zu verhindern

藏色散人
藏色散人nach vorne
2020-04-06 16:07:322505Durchsuche

Eine kurze Diskussion über Token

Token ist ein Token und seine größte Eigenschaft ist Zufälligkeit und Unvorhersehbarkeit. Normale Hacker oder Software können es nicht erraten.

Was ist also die Funktion von Token? Was ist das Prinzip?

Token wird im Allgemeinen an zwei Stellen verwendet – um wiederholte Formularübermittlungen und Anti-CSRF-Angriffe (Cross-Site Request Forgery) zu verhindern.

Beides wird grundsätzlich durch Session-Tokens umgesetzt. Wenn der Client eine Seite anfordert, generiert der Server ein Zufallszahlen-Token, platziert das Token in der Sitzung und sendet es dann an den Client (normalerweise durch Erstellen eines versteckten Formulars). Wenn der Client das nächste Mal eine Anfrage sendet, wird das Token zusammen mit dem Formular an den Server übermittelt.

Wenn es dann auf „Anti-CSRF-Angriff“ angewendet wird, überprüft der Server den Token-Wert, um festzustellen, ob er mit dem Token-Wert in der Sitzung übereinstimmt. Wenn er gleich ist, kann nachgewiesen werden, dass die Anforderung gültig ist und nicht gefälscht.

Wenn es jedoch verwendet wird, um „das wiederholte Senden von Formularen zu verhindern“, wird der Token-Wert in der Sitzung nach der ersten Überprüfung aktualisiert Das zweite Überprüfungsurteil lautet: Es ist fehlgeschlagen, da sich das Token in der vom Benutzer übermittelten Form nicht geändert hat, das Token in der serverseitigen Sitzung jedoch geändert wurde.

Die obige Sitzungsanwendung ist relativ sicher, aber auch umständlich. Gleichzeitig muss bei mehreren Seiten und mehreren Anforderungen die Methode zum gleichzeitigen Generieren mehrerer Token verwendet werden, was dauert Dadurch werden mehr Ressourcen beansprucht und die Ausführungseffizienz verringert. Daher kann anstelle des Sitzungstokens auch die Methode zum Speichern von Verifizierungsinformationen in Cookies verwendet werden. Wenn es sich beispielsweise um „wiederholte Übermittlungen“ handelt, werden die übermittelten Informationen nach der ersten Übermittlung in das Cookie geschrieben. Bei der zweiten Übermittlung schlägt die zweite Übermittlung fehl, da das Cookie bereits über einen Übermittlungsdatensatz verfügt.

Allerdings hat die Cookie-Speicherung eine fatale Schwachstelle (XSS-Angriffe können Benutzer-Cookies leicht erbeuten), dann kommt es zu einem weiteren Gameover. Hacker werden CSRF-Angriffe direkt implementieren.

<?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;];
    echo "<br/>";
    echo "token:".$_SESSION[&#39;token&#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>

Empfohlenes Lernen: PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonSo fügen Sie einem PHP-Formular ein Token hinzu, um wiederholte Übermittlungen zu verhindern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen