CsrfService.php

Code Hygiene Score: 100

Keine Issues gefunden.

Klassen 1

Funktionen 5

Verwendet von 1

Versionen 1

Code

<?php

declare(strict_types=1);

namespace Framework;

// @responsibility: CSRF-Token-Generierung und -Validierung

class CsrfService
{
    private const TOKEN_NAME = '_csrf_token';
    private const TOKEN_LENGTH = 32;

    public static function generateToken(): string
    {
        if (empty($_SESSION[self::TOKEN_NAME])) {
            $_SESSION[self::TOKEN_NAME] = bin2hex(random_bytes(self::TOKEN_LENGTH));
        }

        return $_SESSION[self::TOKEN_NAME];
    }

    public static function getToken(): string
    {
        return $_SESSION[self::TOKEN_NAME] ?? self::generateToken();
    }

    public static function validateToken(?string $token): bool
    {
        if ($token === null || empty($_SESSION[self::TOKEN_NAME])) {
            return false;
        }

        return hash_equals($_SESSION[self::TOKEN_NAME], $token);
    }

    public static function regenerateToken(): string
    {
        unset($_SESSION[self::TOKEN_NAME]);

        return self::generateToken();
    }

    public static function getTokenField(): string
    {
        $token = htmlspecialchars(self::getToken(), ENT_QUOTES, 'UTF-8');

        return '<input type="hidden" name="' . self::TOKEN_NAME . '" value="' . $token . '">';
    }
}
← Übersicht Graph