Heim >Backend-Entwicklung >PHP-Tutorial >Wie implementiert man CSRF-Tokens sicher in PHP?
Verwendung zufälliger Bytes für die Generierung starker Token
Im Im Kontext der CSRF-Token-Generierung birgt die Verwendung von rand() und uniqid() aufgrund ihrer Vorhersehbarkeit und begrenzten Entropie Sicherheitsrisiken. Entscheiden Sie sich stattdessen für:
session_start(); if (empty($_SESSION['token'])) { $_SESSION['token'] = bin2hex(random_bytes(32)); } $token = $_SESSION['token'];
CSRF-Tokens sicher überprüfen
Vermeiden Sie die Verwendung direkter Gleichheitsprüfungen (== oder ===). Verwenden Sie stattdessen hash_equals() für PHP 5.6 oder paragonie/hash-compat für frühere Versionen:
if (!empty($_POST['token'])) { if (hash_equals($_SESSION['token'], $_POST['token'])) { // Proceed to form data processing } else { // Log and monitor these attempts } }
Erhöhung der Sicherheit mit Per-Form-Tokens
Um Tokens einzuschränken auf bestimmte Formen verwenden hash_hmac():
echo hash_hmac('sha256', '/my_form.php', $_SESSION['second_token']);
$calc = hash_hmac('sha256', '/my_form.php', $_SESSION['second_token']); if (hash_equals($calc, $_POST['token'])) { // Continue... }
Hybrider Ansatz für Einfachheit
Mit Twig-Templating können Sie die Token-Generierung mithilfe einer benutzerdefinierten Twig-Funktion vereinfachen:
$twigEnv->addFunction( new \Twig_SimpleFunction( 'form_token', function($lock_to = null) { // ... } ) );
<input type="hidden" name="token" value="{{ form_token() }}" />
Oder für gesperrt Tokens:
<input type="hidden" name="token" value="{{ form_token('/my_form.php') }}" />
Einweg-CSRF-Tokens
Erwägen Sie bei Bedarf die Verwendung einer speziellen Bibliothek zur Verwaltung von Einmal-CSRF-Tokens, z. B. Anti-CSRF Bibliothek von Paragon Initiative Enterprises.
Das obige ist der detaillierte Inhalt vonWie implementiert man CSRF-Tokens sicher in PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!