- Utworzono autoload/autoloader.php (hybrydowy PSR-4 + legacy) - Zmigrowano 7 entry pointów do centralnego autoloadera - Dodano PSR-4 mapowanie w composer.json (Domain, Shared, Admin, Frontend) - Utworzono Shared\Email\Email (PHPMailer, migracja z Helpers) - Utworzono Shared\Security\CsrfToken (random_bytes + hash_equals) - Wrappery w Helpers delegują do nowych klas - Zaktualizowano docs/PROJECT_STRUCTURE.md - Inicjalizacja PAUL (.paul/) z roadmapą 19 faz refaktoryzacji Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
29 lines
590 B
PHP
29 lines
590 B
PHP
<?php
|
|
namespace Shared\Security;
|
|
|
|
class CsrfToken
|
|
{
|
|
const SESSION_KEY = 'csrf_token';
|
|
|
|
public static function getToken()
|
|
{
|
|
if ( empty( $_SESSION[self::SESSION_KEY] ) )
|
|
$_SESSION[self::SESSION_KEY] = bin2hex( random_bytes( 32 ) );
|
|
|
|
return $_SESSION[self::SESSION_KEY];
|
|
}
|
|
|
|
public static function validate( $token )
|
|
{
|
|
if ( empty( $_SESSION[self::SESSION_KEY] ) || empty( $token ) )
|
|
return false;
|
|
|
|
return hash_equals( $_SESSION[self::SESSION_KEY], $token );
|
|
}
|
|
|
|
public static function regenerate()
|
|
{
|
|
unset( $_SESSION[self::SESSION_KEY] );
|
|
}
|
|
}
|