v1.6.1
Security
- CSRF protection — nueva clase
App\Core\Csrfcon métodos estáticostoken()/verify(); todos los formularios POST incluyen un campo oculto_csrfvalidado en cada controlador viaController::verifyCsrf(); token comparado conhash_equals()para prevenir timing attacks - XSS en mensajes flash —
$icony$messageenviews/layouts/messages.phpahora usanjson_encode()en lugar de interpolación directa en el string JavaScript - Delete de usuario cambiado de GET a POST — elimina explotación CSRF vía
<img>o link prefetch;users-delete.jscrea y envía un form dinámicamente con el token CSRF al confirmar - Session fixation en login —
session_regenerate_id(true)se llama inmediatamente después depassword_verify()exitoso - Tokens de reset de contraseña hasheados en DB —
Auth::createPasswordResetToken()almacenahash('sha256', $token)enpassword_resets; el token raw solo viaja en la URL del email
Fixed
- Null dereference en
User::update()— retornafalsetemprano sigetById($id)esnull, evitando fatal TypeError en PHP 8.x User::update()éxito falso — cambiado deaffected_rows >= 0aaffected_rows !== -1para distinguir error de DB de actualización idempotenteFileCache::remember()no cacheaba null — ahora verificais_file()antes de llamarget()para distinguir un miss real de un valor null cacheado$faviconsin escapar en header —views/layouts/header.phpahora pasa$faviconporhtmlspecialchars()
Full Changelog
https://github.com/Jandres25/Encriptacion_PHP/blob/master/CHANGELOG.md