Extras Implementados
Protección CSRF
Implementación de tokens CSRF en formularios
Documentation Index
Fetch the complete documentation index at: /llms.txt
Use this file to discover all available pages before exploring further.
Implementación de tokens CSRF en formularios
Config\Csrfclass Csrf
{
// Genera un token y lo almacena en la sesión
public static function generar(): string
{
if (session_status() === PHP_SESSION_NONE) {
session_start();
}
$token = bin2hex(random_bytes(32));
$_SESSION['csrf_token'] = $token;
return $token;
}
// Genera un campo hidden HTML con el token
public static function campo(): string
{
$token = self::generar();
return '<input type="hidden" name="csrf_token" value="' . $token . '">';
}
// Valida el token enviado contra el de la sesión
public static function validar(): bool
{
$token = $_POST['csrf_token'] ?? '';
$sessionToken = $_SESSION['csrf_token'] ?? '';
return hash_equals($sessionToken, $token);
}
}
<form action="/productos/store" method="POST">
<?= Csrf::campo(); ?>
<!-- Resto del formulario -->
</form>
if (!Csrf::validar()) {
$_SESSION['error'] = 'Token de seguridad inválido.';
header('Location: /productos');
exit;
}
| Formulario | Controlador |
|---|---|
| Login | AuthController::login() |
| Crear producto | ProductoController::store() |
| Editar producto | ProductoController::update() |
| Eliminar producto | ProductoController::delete() |
hash_equals() se usa para la comparación del token, lo que previene ataques de timing que podrían adivinar el token carácter por carácter.