Heim >Backend-Entwicklung >PHP-Tutorial >Wie kann ich meine Webformulare mit PHP vor CSRF-Angriffen schützen?

Wie kann ich meine Webformulare mit PHP vor CSRF-Angriffen schützen?

Linda Hamilton
Linda HamiltonOriginal
2024-12-09 05:37:14969Durchsuche

How Can I Secure My Web Forms Against CSRF Attacks Using PHP?

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!

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