feat(server): harden configuration for public exposure (#52) #68
No reviewers
Labels
No labels
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Security
Kind/Testing
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: jeux/le-grand-concours#68
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/52-vps-hardening"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #52
Passe de durcissement sécurité pour une exposition publique derrière reverse proxy.
Changements serveur
config.ts(testé) :ALLOWED_ORIGINS(liste blanche CORS explicite ; prod fermée par défaut),TRUST_PROXY(bool / nb de sauts / sous-réseau),SOCKET_MAX_BUFFER_BYTES(défaut 8 Kio).security-headers.ts: CSP adaptée au SPA (default-src 'self',script-src 'self',style-src 'self' 'unsafe-inline',connect-src 'self',frame-ancestors 'none'…),X-Content-Type-Options: nosniff,X-Frame-Options: DENY,Referrer-Policy,COOP,Permissions-Policy. HSTS laissé au proxy.app.ts:trustProxydepuis l'env, headers sur chaque réponse,maxHttpBufferSize(cap de trame), CORS depuis la config.rate-limit.ts: journalisation des rejets de fréquence, une fois par fenêtre/socket, sans payload ni token (logger injectable, silencieux hors production).smoke.ts: vérifie désormais les en-têtes de sécurité.Docs
docs/Securite.md(nouveau) : variables d'env, stratégie trust proxy, en-têtes, limites Socket.IO (validation, taille de trame, fréquence 30/s, cap de salles), revue du stockagelocalStoragedu token de reconnexion et de sa TTL (RECONNECT_GRACE_SECONDS30 s), journalisation des rejets, et checklist de déploiement. Lié depuis le README.Conformité aux critères
origine autorisée via env ✓ · en-têtes HTTP adaptés au client statique ✓ · stratégie trust proxy documentée ✓ · limites taille/fréquence vérifiées (cap de trame + rate-limit) ✓ · revue token/TTL ✓ · logs de rejet sans secret ✓ · tests + checklist ✓
Vérification
node:test232 pass (1 skipped), Jest 13/13, Vitest 83/83 ; coverage exit 0connect-src 'self'validé en navigateur)npm run smokevert (inclut la vérification des en-têtes), build OK, check:assets OK, validate:questions OK (360)