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; }
HTML:
<input type="hidden" name="token" value="<?php echo $token; ?>" />
Behebung der Schwäche
Leider ist die aktuelle Methode zur Token-Generierung fehlerhaft Techniken:
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'];
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'];
Ü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 } }
Zusätzliche Überlegungen
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!