Heim >Backend-Entwicklung >PHP-Tutorial >Wie kann ich meine Webformulare mit PHP vor CSRF-Angriffen schützen?
Sichern von Webformularen mithilfe von CSRF-Tokens: Eine umfassende Anleitung mit PHP-Beispielen
Cross-Site Request Forgery (CSRF) ist eine böswillige Angriffstechnik das Web-Schwachstellen ausnutzt, um im Namen eines Benutzers nicht autorisierte Aktionen durchzuführen. Um Ihre Website vor CSRF zu schützen, ist die Implementierung eines robusten Token-Mechanismus von entscheidender Bedeutung. Dieser Artikel enthält eine detaillierte Anleitung zum Hinzufügen von CSRF-Tokens mithilfe von PHP und geht auf die dabei auftretenden Herausforderungen ein.
Generieren sicherer Tokens
Beim Generieren von CSRF-Tokens ist die Verwendung unbedingt erforderlich zuverlässige Zufallsquellen, um Vorhersagbarkeit zu vermeiden und eine ausreichende Entropie sicherzustellen. PHP 7 bietet die Funktion random_bytes(), während PHP 5.3 zu diesem Zweck mcrypt_create_iv() oder openssl_random_pseudo_bytes() nutzen kann. Vermeiden Sie anfällige Methoden wie rand() oder md5().
Beispiel für PHP 7:
if (empty($_SESSION['token'])) { $_SESSION['token'] = bin2hex(random_bytes(32)); } $token = $_SESSION['token'];
Beispiel für PHP 5.3 (oder mit ext- mcrypt):
if (empty($_SESSION['token'])) { if (function_exists('mcrypt_create_iv')) { $_SESSION['token'] = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM)); } else { $_SESSION['token'] = bin2hex(openssl_random_pseudo_bytes(32)); } } $token = $_SESSION['token'];
Integration mit Formulare
In Ihren HTML-Formularen fügen Sie ein Eingabefeld ein, um das generierte CSRF-Token sicher an den Server zu übertragen:
<input type="hidden" name="token" value="<?php echo $token; ?>" />
Token-Verifizierung
Wenn das Formular übermittelt wird, überprüfen Sie das übermittelte Token mit dem im gespeicherten Sitzung:
if (!empty($_POST['token'])) { if (hash_equals($_SESSION['token'], $_POST['token'])) { // Proceed to process the form data } else { // Log this as a warning and keep an eye on these attempts } }
Per-Form-Tokens und HMAC
Für zusätzliche Sicherheit sollten Sie die Verwendung von Per-Form-Tokens in Betracht ziehen. Generieren Sie einen separaten HMAC-Schlüssel und verwenden Sie hash_hmac(), um das CSRF-Token an eine bestimmte Form zu sperren.
$calc = hash_hmac('sha256', '/my_form.php', $_SESSION['second_token']); if (hash_equals($calc, $_POST['token'])) { // Continue... }
Hybrid-Ansatz mit Twig
Twig-Benutzer können a nutzen benutzerdefinierte Funktion zum Generieren allgemeiner und gesperrter Funktionen Tokens:
{{ form_token() }} {{ form_token('/my_form.php') }}
Einweg-CSRF-Tokens
Für Szenarien, die Einmal-Tokens erfordern, sollten Sie die Verwendung einer externen Bibliothek in Betracht ziehen, z. B. Anti- CSRF-Bibliothek, die die Einlösung und den Ablauf von Token verwaltet.
Durch die Implementierung dieser Techniken können Sie Ihre Website effektiv davor schützen CSRF-Angriffe und stellen die Integrität der Benutzerinteraktionen sicher.
Das obige ist der detaillierte Inhalt vonWie kann ich meine Webformulare mit PHP vor CSRF-Angriffen schützen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!