162 lines
4.8 KiB
ApacheConf
162 lines
4.8 KiB
ApacheConf
# =====================================================
|
|
# Sillycone Village
|
|
# Configuration Apache sécurisée pour site statique Hugo
|
|
# =====================================================
|
|
#
|
|
# ⚠ SYNCHRONISATION : ce fichier gouverne en réalité TOUT le compte OVH
|
|
# (vitrine/, horairefacile/, api.php…) une fois déployé à la racine, pas
|
|
# seulement ce site Hugo — l'héritage .htaccess d'Apache descend dans tous
|
|
# les sous-dossiers. La copie de référence est désormais
|
|
# SiteEcoSlow/.htaccess (voir son en-tête pour le détail complet) : c'est
|
|
# là que vit le code PHP qui dépend de la règle Authorization ci-dessous,
|
|
# et c'est elle que build-output.sh génère automatiquement dans
|
|
# output/www/.htaccess. Si vous modifiez l'un des deux fichiers, reportez
|
|
# le changement dans l'autre.
|
|
# =====================================================
|
|
|
|
|
|
# -----------------------------------------------------
|
|
# 1. Forcer HTTPS
|
|
# -----------------------------------------------------
|
|
|
|
RewriteEngine On
|
|
|
|
RewriteCond %{HTTPS} !=on
|
|
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
|
|
|
|
|
|
# -----------------------------------------------------
|
|
# 1bis. Transmettre l'en-tête Authorization à PHP
|
|
# -----------------------------------------------------
|
|
# Sur ce type d'hébergement mutualisé, PHP tourne en CGI/FastCGI : Apache
|
|
# ne transmet PAS l'en-tête HTTP Authorization à $_SERVER par défaut. Sans
|
|
# cette règle, requireBearer() (php/www/helpers.php) reçoit toujours un
|
|
# token vide, quel que soit le Bearer Token envoyé par le client — d'où un
|
|
# 401 "Token manquant ou invalide" même avec le bon token (vu sur
|
|
# api.php/auth/verify-token).
|
|
|
|
RewriteCond %{HTTP:Authorization} ^(.+)$
|
|
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
|
|
|
|
|
|
# -----------------------------------------------------
|
|
# 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'; connect-src 'self' https://sillycone-village.be https://www.sillycone-village.be"
|
|
|
|
</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> |