# ===================================================================
# Sécurité de base
# ===================================================================
ServerSignature Off
Options -Indexes
FileETag None
AddDefaultCharset UTF-8
# Bloque fichiers cachés (.env, .git, etc.) et configs/dev
Require all denied
# Forcer une page 404 propre
ErrorDocument 404 /page404.php
# Empêche l'accès direct aux dossiers non publics
RewriteEngine On
RewriteRule ^inc/ - [F,L,NC]
RewriteRule ^sql/ - [F,L,NC]
# Méthodes HTTP autorisées (GET/POST/HEAD)
Require all denied
# Empêche le framing (clickjacking)
Header always set X-Frame-Options "SAMEORIGIN"
# Empêche le MIME sniffing
Header always set X-Content-Type-Options "nosniff"
# Politique du Referer
Header always set Referrer-Policy "strict-origin-when-cross-origin"
# Permissions API (désactive tout par défaut)
Header always set Permissions-Policy "accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), midi=(), payment=(), usb=(), interest-cohort=()"
# Politique de ressources cross-origin
Header always set Cross-Origin-Resource-Policy "same-origin"
Header always set Cross-Origin-Opener-Policy "same-origin"
# Content Security Policy (CSP)
# - autorise CSS en ligne
# - pas d'exec JS hormis le fichier local .js (je n'ai pas utilisé de code javascript donc le site ne devrait jamais utiliser de code js )
Header always set Content-Security-Policy "default-src 'self'; base-uri 'self'; frame-ancestors 'self'; object-src 'none'; img-src 'self' data:; font-src 'self' data:; style-src 'self' 'unsafe-inline'; script-src 'self'; connect-src 'self'"
# Redirection sécurisé: racine -> /public
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^$ public/ [R=302,L]