Documentación de Proyecto Sincro

Csrf
in package

FinalYes

Token sincronizador contra falsificación de peticiones entre sitios (CSRF).

Vive en utils/ y no en el núcleo de la API porque el token es de SESIÓN, no de la API: las páginas PHP necesitan emitirlo para que el frontend lo envíe, y esas páginas cargan bootstrap.php, no el núcleo.

Uso:

  • Página PHP: <script>window.CSRF_TOKEN = '';</script>
  • Frontend: cabecera X-CSRF-Token en cada petición
  • Login: Csrf::renovar() tras validar credenciales

── REGLA IMPORTANTE ──────────────────────────────────────────────────────── NUNCA llamar a token() ni a renovar() desde un handler de la API que no declare escribeSesion: true en su Ruta.

Motivo: el despachador libera el bloqueo de sesión con session_write_close() antes de invocar los handlers que no declaran esa bandera. El token se escribiría en $_SESSION en memoria y se devolvería al cliente, pero no llegaría a persistirse. El frontend guardaría entonces un token que el servidor desconoce y toda petición posterior respondería 403 CSRF_INVALIDO, mientras el login habría contestado ok:true. El usuario percibe que "entra" y que después no funciona nada, sin ningún error que lo explique.

En logout no hace falta nada: session_destroy() se lleva el token consigo.

Table of Contents

Constants

CABECERA  = 'HTTP_X_CSRF_TOKEN'
CLAVE  = '__csrf'

Methods

renovar()  : string
Renueva el token. Debe llamarse tras iniciar sesión, junto a session_regenerate_id().
token()  : string
Devuelve el token de la sesión, generándolo si no existe.
valido()  : bool
Verifica el token recibido contra el de la sesión.

Constants

CABECERA

private mixed CABECERA = 'HTTP_X_CSRF_TOKEN'

CLAVE

private mixed CLAVE = '__csrf'

Methods

renovar()

Renueva el token. Debe llamarse tras iniciar sesión, junto a session_regenerate_id().

public static renovar() : string
Return values
string —

el nuevo token

token()

Devuelve el token de la sesión, generándolo si no existe.

public static token() : string
Return values
string

valido()

Verifica el token recibido contra el de la sesión.

public static valido() : bool

Se acepta por cabecera (preferente) o por campo del formulario, para las peticiones multipart donde añadir cabeceras es incómodo.

Return values
bool

        
On this page

Search results