Heim > Backend-Entwicklung > PHP-Tutorial > Wie implementiert man den CSRF-Token-Schutz sicher in PHP-Formularen?

Wie implementiert man den CSRF-Token-Schutz sicher in PHP-Formularen?

DDD
Freigeben: 2024-12-17 20:00:20
Original
363 Leute haben es durchsucht

How to Securely Implement CSRF Token Protection in PHP Forms?

Verwaltung von CSRF-Verteidigungstechniken: Eine exemplarische Vorgehensweise mit PHP-Formularen

Einführung

Das Hinzufügen geeigneter Sicherheitsmaßnahmen zu Ihrer Website erfordert Adressierung potenzielle Schwachstellen, einschließlich Cross-Site Request Forgery (CSRF). Dieser Artikel befasst sich mit dem effektiven Hinzufügen eines CSRF-Tokens mithilfe von PHP.

Verstehen des Problems

Sie haben den CSRF-Token-Schutz auf Ihrer Website implementiert, aber der Wert des Tokens ist inkonsistent in den HTML-Formularen vorhanden. Insbesondere die „Kontakt“- und AJAX-Formulare weisen dieses Problem auf.

Überprüfung des Codes

Lassen Sie uns den Code unter die Lupe nehmen, der zum Einfügen des verwendet wird Token:

PHP:

if (!isset($_SESSION)) {
    session_start();
    $_SESSION['formStarted'] = true;
}

if (!isset($_SESSION['token'])) {
    $token = md5(uniqid(rand(), TRUE));
    $_SESSION['token'] = $token;
}
Nach dem Login kopieren

HTML:

<input type="hidden" name="token" value="<?php echo $token; ?>" />
Nach dem Login kopieren

Behebung der Schwäche

Leider ist die aktuelle Methode zur Token-Generierung fehlerhaft Techniken:

  • rand() ist keine zuverlässige Quelle für Zufälligkeit.
  • uniqid() erzeugt eine begrenzte Anzahl an Entropie.
  • md5() trägt nicht dazu bei zur Entropie, sondern permutiert sie.

Implementierung eines robusten Tokens Generator

Um Ihre Formulare zu schützen, verwenden Sie den folgenden PHP-Code:

PHP 7:

session_start();
if (empty($_SESSION['token'])) {
    $_SESSION['token'] = bin2hex(random_bytes(32));
}
$token = $_SESSION['token'];
Nach dem Login kopieren

PHP 5.3 (oder mit ext-mcrypt):

session_start();
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'];
Nach dem Login kopieren

Überprüfen das Token

Als nächstes validieren Sie das CSRF-Token ordnungsgemäß, um Ausnutzungsversuche zu verhindern:

if (!empty($_POST['token'])) {
    if (hash_equals($_SESSION['token'], $_POST['token'])) {
         // Proceed to process the form data
    } else {
         // Log this as a warning and monitor such attempts
    }
}
Nach dem Login kopieren

Zusätzliche Überlegungen

  • Erwägen Sie, die CSRF-Token für jedes Formular spezifisch zu gestalten, um die Sicherheit zu erhöhen.
  • Für weiteren Schutz verwenden Sie die Twig-Templating-Engine, um die Token-Verarbeitung zu vereinfachen und in Ihre Vorlagen zu integrieren.
  • Entdecken Sie die Verwendung spezialisierter Bibliotheken wie der Anti-CSRF-Bibliothek von Paragon Initiative Enterprises für einzigartige, einmalig verwendbare CSRF-Token.

Das obige ist der detaillierte Inhalt vonWie implementiert man den CSRF-Token-Schutz sicher in PHP-Formularen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage