fix #34 #38 #39: JWT cookie migration + CSRF protection + XSS hardening #46

Merged
NixCyRy merged 2 commits from fix/security-34-38-39 into main 2026-08-06 10:03:11 -04:00
NixCyRy commented 2026-08-06 10:02:52 -04:00 (Migrated from github.com)

Security sprint: #34, #38, #39

#34 (XSS — esc() + innerHTML)

Déjà réglé dans le code actuel. esc() couvre le backtick, plus aucun innerHTML += restant.

  • Retiré les 35 headers Bearer du frontend (tous les fichiers JS)
  • setAuth() ne stocke plus le JWT en localStorage
  • Ajout endpoint /api/logout pour clearer les cookies
  • Le frontend call /api/logout au logout
  • Cookie nf_csrf_token setté au login/register/reset/change-pw
  • before_app_request valide le X-CSRF-Token sur tous les POST/PUT/DELETE
  • fetchWithTimeout injecte automatiquement le header X-CSRF-Token

Tests

  • ✅ pytest: 64/64
  • ✅ Lighthouse: 100/100/100/100
  • ✅ OWASP ZAP: 0 FAIL (16 CSP warnings pré-existants #43)
  • ✅ SonarQube: 0 bugs, 0 security hotspots
## Security sprint: #34, #38, #39 ### #34 (XSS — esc() + innerHTML) Déjà réglé dans le code actuel. `esc()` couvre le backtick, plus aucun `innerHTML +=` restant. ### #38 (JWT localStorage → cookie httpOnly) - Retiré les 35 headers `Bearer` du frontend (tous les fichiers JS) - `setAuth()` ne stocke plus le JWT en localStorage - Ajout endpoint `/api/logout` pour clearer les cookies - Le frontend call `/api/logout` au logout ### #39 (CSRF — double-submit cookie) - Cookie `nf_csrf_token` setté au login/register/reset/change-pw - `before_app_request` valide le X-CSRF-Token sur tous les POST/PUT/DELETE - `fetchWithTimeout` injecte automatiquement le header X-CSRF-Token ## Tests - ✅ pytest: 64/64 - ✅ Lighthouse: 100/100/100/100 - ✅ OWASP ZAP: 0 FAIL (16 CSP warnings pré-existants #43) - ✅ SonarQube: 0 bugs, 0 security hotspots
Sign in to join this conversation.
No description provided.