Heim  >  Artikel  >  Backend-Entwicklung  >  Tipps zum Schutz von PHP-Formularen: So verhindern Sie wiederholte Formularübermittlungen

Tipps zum Schutz von PHP-Formularen: So verhindern Sie wiederholte Formularübermittlungen

WBOY
WBOYOriginal
2023-06-24 11:50:131813Durchsuche

Bei der Verwendung von PHP-Formularen zur Datenübermittlung tritt häufig das Problem der wiederholten Formularübermittlung auf. Dies kann zu ungenauen Daten oder, schlimmer noch, zu Systemabstürzen führen. Daher ist es sehr wichtig zu verstehen, wie man doppelte Einreichungen verhindert. In diesem Artikel werde ich einige PHP-Formularschutztechniken vorstellen, die Ihnen dabei helfen, wiederholte Probleme bei der Formularübermittlung effektiv zu verhindern.

1. Fügen Sie dem Formular ein Token hinzu.

Das Hinzufügen eines Tokens zum Formular ist eine gängige Methode, um wiederholte Übermittlungen zu verhindern. Bei dieser Methode wird dem Formular ein ausgeblendetes Feld hinzugefügt, das einen eindeutigen Zufallswert enthält. Beim Absenden des Formulars prüft der PHP-Code, ob dieser Wert mit dem auf dem Server gespeicherten Wert übereinstimmt. Wenn keine Übereinstimmung vorliegt, bedeutet dies, dass das Formular wiederholt gesendet wurde und die Daten nicht verarbeitet werden. Das Folgende ist ein einfaches Beispiel für die Token-Nutzung:

<?php
  session_start();
  if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_POST['token'])) {
    $token = $_POST['token'];
    if ($_SESSION['token'] === $token) {
      //处理表单数据
      //...
      unset($_SESSION['token']);
    } else {
      echo '表单已提交!';
    }
  } else {
    $token = md5(uniqid(rand(), true));
    $_SESSION['token'] = $token;
?>
  <form method="post">
    <input type="hidden" name="token" value="<?php echo $token; ?>" />
    <!--其他表单元素-->
    <button type="submit">提交</button>
  </form>
<?php } ?>

In diesem Beispiel prüfen wir zunächst, ob es sich bei der Anfrage um einen POST handelt, und wenn ja, prüfen wir, ob der Token-Wert im Formular übereinstimmt. Wenn die Token übereinstimmen, verarbeiten Sie die Formulardaten. Nach der Verarbeitung der Daten verwenden wir die Funktion unset, um den Token aus der SESSION zu entfernen, da dieser Token nicht mehr benötigt wird. Stimmen die Token nicht überein, wurde das Formular zweimal übermittelt und die Formulardaten werden nicht verarbeitet. Wenn es sich bei der Anfrage nicht um einen POST handelt, generieren wir ein neues Token, speichern es in der SESSION und fügen es dem Formular hinzu.

2. Umleitung verwenden

Wenn Sie nach dem Absenden des Formulars immer noch dieselbe URL verwenden, wird das Formular wiederholt gesendet. Um dies zu vermeiden, können Sie Weiterleitungen verwenden. Bei dieser Technik handelt es sich um eine Zwischenseite, die den Benutzer nach der Übermittlung des Formulars auf eine andere Seite weiterleitet und nicht auf die ursprüngliche Formularseite. Hier ist ein Beispiel für die Verwendung von Weiterleitungen, um wiederholte Formularübermittlungen zu verhindern:

<?php
  if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    //处理表单数据
    //...
    header('Location: success.php');
    exit;
  }
?>

In diesem Beispiel verwenden wir die Header-Funktion, um den Benutzer nach der Verarbeitung der Formulardaten auf die Seite success.php umzuleiten. Bei dieser Seite handelt es sich um eine Seite, die nach einer erfolgreichen Übermittlung angezeigt wird. Sie enthält kein Formular, daher kann der Benutzer das Formular nicht erneut über die Schaltfläche „Zurück“ des Browsers übermitteln oder die Seite neu laden.

3. Deaktivieren Sie den Browser-Cache.

Speichern Sie das Formular im Browser, was dazu führen kann, dass das Formular wiederholt gesendet wird. Da Browser die Webseiten einer Site zwischenspeichern können, wird das Formular möglicherweise erneut gesendet, wenn der Benutzer auf die Schaltfläche „Zurück“ des Browsers klickt. Um dies zu vermeiden, müssen Sie das Browser-Caching deaktivieren. Hier ist ein einfaches Beispiel für die Deaktivierung des Browser-Caching:

<?php
  header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");         // Date in the past
  header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // always modified
  header("Cache-Control: no-store, no-cache, must-revalidate");  // HTTP/1.1
  header("Cache-Control: post-check=0, pre-check=0", false);
  header("Pragma: no-cache");                                // HTTP/1.0
?>

In diesem Beispiel verwenden wir mehrere HTTP-Header, um den Browser anzuweisen, die aktuelle Seite nicht zwischenzuspeichern. Dazu gehören ein „Expires“-Header für Daten in der Vergangenheit und mehrere andere Header zur Verarbeitung der Seite.

Fazit

Bei der Verwendung von PHP-Formularen ist es sehr wichtig, doppelte Übermittlungen zu verhindern. Die oben genannten Methoden beschreiben einige wirksame Techniken, die Ihnen dabei helfen können, das wiederholte Einsenden von Formularen zu vermeiden und Ihre Datensicherheit zu schützen. Wenn Sie mehr über die PHP-Formularverteidigung erfahren möchten, schauen Sie sich die PHP-Dokumentation an oder lesen Sie Blogs und Artikel von anderen PHP-Entwicklern.

Das obige ist der detaillierte Inhalt vonTipps zum Schutz von PHP-Formularen: So verhindern Sie wiederholte Formularübermittlungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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