fix(security): consolidation & securite phase 1 (#84, BUG-021 a BUG-034)
- sanitizer XSS serveur (markdown + page de partage) [BUG-021/022] - rate-limit/lockout MFA [BUG-023] - isolation vaults par segments [BUG-024] - caps regex ReDoS [BUG-025] - SSRF webhooks + secrets externalises [BUG-026] - rotation/revocation des jetons [BUG-027] - politique de mot de passe + invalidation sessions [BUG-028] - verrous users.json [BUG-029] - IP reelle dans les audits [BUG-030] - rate-limit par compte [BUG-031] - symlinks hors vault ignores [BUG-032] - recherche simple via inverted index [BUG-033] - token en memoire + cookie HttpOnly, CSP durcie [BUG-034] Tests: pytest 961 passed / 6 skipped, ruff 0, mypy 0, frontend vert.
This commit is contained in:
@@ -317,6 +317,31 @@
|
||||
|
||||
---
|
||||
|
||||
## #84 — Consolidation & sécurité (phase 1) ✅ TERMINÉ
|
||||
|
||||
Traitement des vulnérabilités de la revue statique du 2026-09-13 (BUG-021 → BUG-034).
|
||||
|
||||
- **Sanitizer XSS serveur** (`backend/services/sanitizer.py`, stdlib, liste blanche
|
||||
de balises/attributs/schémas) appliqué au rendu markdown et à la page publique
|
||||
`/s/{token}` (titre, frontmatter et JSON échappés, `</script>` neutralisé).
|
||||
- **Auth durcie** : rate-limit IP + compte et verrouillage sur les endpoints MFA ;
|
||||
rotation du refresh token et révocation de l'access token au logout ; politique de
|
||||
mot de passe centralisée (8–128) ; `password_changed_at` invalide les jetons
|
||||
antérieurs ; verrou `RLock` sur `users.json`.
|
||||
- **Isolation & réseau** : `resolve_safe_path` compare par segments (`vault` ≠
|
||||
`vault-evil`) ; webhooks protégés contre le SSRF (HTTPS, IP privées bloquées,
|
||||
résolution vérifiée, redirections interdites, secret externalisé) ; IP client
|
||||
réelle dans les audits.
|
||||
- **Robustesse** : validation des regex (ReDoS), symlinks hors vault ignorés à
|
||||
l'indexation, recherche simple et `search_fulltext` branchés sur l'inverted index.
|
||||
- **Frontend** : token d'accès en mémoire + cookie `HttpOnly` (plus de
|
||||
`sessionStorage`), CSP durcie (`object-src`, `base-uri`, `form-action`,
|
||||
`frame-ancestors`).
|
||||
- **Tests** : `tests/test_security_hardening.py` (30) ; suite backend 961 passed /
|
||||
6 skipped ; ruff + mypy 0 ; suites frontend vertes.
|
||||
|
||||
---
|
||||
|
||||
## Grosses fonctionnalités — fiches dédiées
|
||||
|
||||
| # | Feature | Version | Fiche |
|
||||
|
||||
Reference in New Issue
Block a user