# =================================================================== # 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]