Diese Woche am beliebtesten

Vertiefendes Material

CSRF Token Generator

Dieser Code implementiert einen sicheren Schutz gegen Cross-Site Request Forgery (CSRF). Er erzeugt zufällige Tokens, die bei jeder Formularübertragung geprüft werden. Dadurch wird verhindert, dass Angreifer unbefugt Aktionen im Namen eines eingeloggten Nutzers ausführen können.

<?php
$secure = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on';
session_set_cookie_params([
    'lifetime' => 0,
    'path' => '/',
    'domain' => '',
    'secure' => $secure,
    'httponly' => true,
    'samesite' => 'Strict'
]);
if (session_status() !== PHP_SESSION_ACTIVE) {
    session_start();
}
function csrf_token(int $ttlSeconds = 1800): string {
    if (empty($_SESSION['csrf']['value']) || empty($_SESSION['csrf']['time'])) {
        $_SESSION['csrf']['value'] = bin2hex(random_bytes(32));
        $_SESSION['csrf']['time']  = time();
    } elseif (time() - $_SESSION['csrf']['time'] > $ttlSeconds) {
        $_SESSION['csrf']['value'] = bin2hex(random_bytes(32));
        $_SESSION['csrf']['time']  = time();
    }
    return $_SESSION['csrf']['value'];
}
function csrf_verify(?string $token, bool $oneTime = true, int $ttlSeconds = 1800): bool {
    if (!isset($_SESSION['csrf']['value'], $_SESSION['csrf']['time'])) {
        return false;
    }
    if ($token === null) {
        return false;
    }
    if (time() - $_SESSION['csrf']['time'] > $ttlSeconds) {
        return false;
    }
    $valid = hash_equals($_SESSION['csrf']['value'], $token);
    if ($valid && $oneTime) {
        unset($_SESSION['csrf']);
    }
    return $valid;
}
function csrf_input(): string {
    $token = htmlspecialchars(csrf_token(), ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
    return '<input type="hidden" name="csrf" value="'.$token.'">';
}
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (!csrf_verify($_POST['csrf'] ?? null)) {
        http_response_code(403);
        exit('Ungültiges CSRF Token');
    }
    echo 'Formular sicher verarbeitet';
}
?>
<form method="post" action="">
    <?= csrf_input() ?>
    <input type="text" name="beispiel" placeholder="Text">
    <button type="submit">Senden</button>
</form>
Dreamcodes Redaktion
Dreamcodes Redaktion
Jeder Inhalt auf Dreamcodes entsteht mit einem klaren Anspruch: geprüfte Praxis statt schneller Theorie. Was hier veröffentlicht wird, basiert auf Best Practices, echten Projekterfahrungen und technischem Verständnis, das über das Offensichtliche hinausgeht. Unser Ziel ist ein Fundament, auf dem du aufbauen kannst, nicht eines, das beim ersten produktiven Einsatz bricht. Wie du die Inhalte integrierst, absicherst und in deinen Kontext überträgst, liegt bei dir. Die fachliche Grundlage liefern wir, die Verantwortung für den Einsatz bleibt deine.

Mehr entdecken? Lass dich von weiteren ähnlichen Inhalten inspirieren!