Samstag, 13 September 2025

Top 5 diese Woche

Ähnliche Tutorials

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>
Vorheriges Tutorial
Nächstes Tutorial

Hier etwas für dich dabei?