Heim >Backend-Entwicklung >PHP-Tutorial >Wie implementiert man CSRF-Tokens sicher in PHP?

Wie implementiert man CSRF-Tokens sicher in PHP?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-08 00:39:12325Durchsuche

How to Securely Implement CSRF Tokens in PHP?

So implementieren Sie CSRF-Tokens in PHP: Eine umfassende Anleitung

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!

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