feat(securite): en-tetes HTTP, trust proxies et configuration de production durcie

- middleware SecurityHeaders (HSTS, CSP, X-Frame-Options, etc.)
- trustProxies pour le reverse proxy Nginx Proxy Manager
- .env.production.example (APP_DEBUG=false, sessions chiffrees, cookies Secure)
- politique de securite SECURITY.md

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-08 18:43:17 +02:00
parent d75afe0aac
commit ebe1836f7e
4 changed files with 172 additions and 1 deletions
+55
View File
@@ -0,0 +1,55 @@
# ══════════════════════════════════════════════════════════════
# CESIZen — Modèle de configuration PRODUCTION
# Copier en `.env` sur le serveur puis renseigner les valeurs.
# ⚠️ Ne JAMAIS committer le .env réel (secrets, clés, mots de passe).
# ══════════════════════════════════════════════════════════════
APP_NAME=CESIZen
APP_ENV=production
APP_KEY= # généré via `php artisan key:generate`
APP_DEBUG=false # JAMAIS true en production (fuite d'infos)
APP_URL=https://cesizen.sam-coffre.duckdns.org
APP_LOCALE=fr
APP_FALLBACK_LOCALE=fr
APP_FAKER_LOCALE=fr_FR
# ── Journalisation ────────────────────────────────────────────
LOG_CHANNEL=stack
LOG_STACK=daily # rotation quotidienne des logs
LOG_LEVEL=warning # on ne loggue pas le debug en prod
# ── Base de données (MySQL/MariaDB en production) ─────────────
DB_CONNECTION=mysql
DB_HOST=cesizen-db
DB_PORT=3306
DB_DATABASE=cesizen
DB_USERNAME=cesizen_app # compte applicatif à privilèges limités
DB_PASSWORD= # mot de passe fort (gestionnaire de secrets)
# ── Sessions & cookies (durcissement) ─────────────────────────
SESSION_DRIVER=database
SESSION_LIFETIME=120
SESSION_ENCRYPT=true # chiffrement des données de session
SESSION_SECURE_COOKIE=true # cookie envoyé uniquement en HTTPS
SESSION_HTTP_ONLY=true # cookie inaccessible au JavaScript (anti-XSS)
SESSION_SAME_SITE=lax # protection CSRF renforcée
# ── Sécurité mots de passe ────────────────────────────────────
BCRYPT_ROUNDS=12 # coût du hachage bcrypt
# ── Cache / File d'attente ────────────────────────────────────
CACHE_STORE=database
QUEUE_CONNECTION=database
FILESYSTEM_DISK=local
# ── Mail (notifications, réinitialisation de mot de passe) ────
MAIL_MAILER=smtp
MAIL_HOST=
MAIL_PORT=587
MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_FROM_ADDRESS="no-reply@cesizen.fr"
MAIL_FROM_NAME="${APP_NAME}"
VITE_APP_NAME="${APP_NAME}"