Files
Site/site/static/.htaccess
T
Mathieu Limonier 585946f2a0 ### Sécurité
- [x] Permissions (fichiers : 644 - dossiers : 755)
- [x] .htaccess
2026-07-23 00:35:20 +02:00

137 lines
3.4 KiB
ApacheConf

# =====================================================
# Sillycone Village
# Configuration Apache sécurisée pour site statique Hugo
# =====================================================
# -----------------------------------------------------
# 1. Forcer HTTPS
# -----------------------------------------------------
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# -----------------------------------------------------
# 2. Protection contre accès fichiers sensibles
# -----------------------------------------------------
<FilesMatch "(^\.|\.git|\.env|\.bak|\.backup|\.old|\.sql|\.log|composer\.json|package\.json)">
Require all denied
</FilesMatch>
# Bloquer l'accès au fichier .htaccess lui-même
<Files ".htaccess">
Require all denied
</Files>
# -----------------------------------------------------
# 3. Headers de sécurité HTTP
# -----------------------------------------------------
<IfModule mod_headers.c>
# Empêche le navigateur de deviner les types MIME
Header always set X-Content-Type-Options "nosniff"
# Protection contre certaines attaques XSS anciennes
Header always set X-XSS-Protection "1; mode=block"
# Contrôle des informations envoyées aux sites externes
Header always set Referrer-Policy "strict-origin-when-cross-origin"
# Désactive les fonctionnalités navigateur inutiles
Header always set Permissions-Policy "geolocation=(), microphone=(), camera=(), payment=(), usb=()"
# Protection contre l'intégration dans une iframe externe
Header always set X-Frame-Options "SAMEORIGIN"
# Politique de sécurité du contenu
# - pas de JS
# - pas de CDN
# - pas de police externe
# - CSS local uniquement
Header always set Content-Security-Policy "default-src 'self'; style-src 'self'; img-src 'self' data:; font-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'; form-action 'self'"
</IfModule>
# -----------------------------------------------------
# 4. Compression
# -----------------------------------------------------
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE \
text/html \
text/plain \
text/css \
text/javascript \
application/javascript \
application/json \
application/xml \
image/svg+xml
</IfModule>
# -----------------------------------------------------
# 5. Cache navigateur
# -----------------------------------------------------
<IfModule mod_expires.c>
ExpiresActive On
# HTML : court pour faciliter les mises à jour
ExpiresByType text/html "access plus 1 hour"
# CSS
ExpiresByType text/css "access plus 1 month"
# SVG
ExpiresByType image/svg+xml "access plus 1 month"
# Fichiers statiques
ExpiresByType application/javascript "access plus 1 month"
</IfModule>
# -----------------------------------------------------
# 6. Désactiver le listing des répertoires
# -----------------------------------------------------
Options -Indexes
# -----------------------------------------------------
# 7. Bloquer certains robots agressifs
# -----------------------------------------------------
<IfModule mod_setenvif.c>
SetEnvIfNoCase User-Agent "MJ12bot" bad_bot
SetEnvIfNoCase User-Agent "AhrefsBot" bad_bot
<RequireAll>
Require all granted
Require not env bad_bot
</RequireAll>
</IfModule>