Mittwoch, 4 Februar 2026

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
Qualität als Standard. Verantwortung als Prinzip. Jede Ressource auf Dreamcodes basiert auf geprüften Best Practices und fundierter Praxiserfahrung. Unser Anspruch ist ein belastbares Fundament statt experimenteller Lösungen. Die Integration und Absicherung der Inhalte liegt in Ihrem Ermessen. Wir liefern die fachliche Basis, die Verantwortung für den produktiven Einsatz verbleibt bei Ihnen.
Vorheriges Tutorial
Nächstes Tutorial

Vielleicht einen Blick WERT?