diff --git a/README.md b/README.md index 45c48f9..8a4ffd2 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,10 @@ Modifier `.env.exemple` en `.env` ### publish.sh `./script/publish.sh` : Publie le site dans le _PUBLISH_DIR_ de _.env_ +Ne pas oublier de vérifier que les +- dossiers sont en 755 (`find /var/www -type d -exec chmod 755 {} \;`) +- fichiers sont en 644 (`find /var/www -type f -exec chmod 644 {} \;`) + ## Spécificités ### Page 404 et Yunohost La page 404.html, si l'option _Activer l'utilisation du fichier d'erreur personnalisé_ est activée, doit être déplacée sur www/error/404.html diff --git a/TODO.md b/TODO.md index d4e5497..ceeeb6a 100644 --- a/TODO.md +++ b/TODO.md @@ -2,14 +2,13 @@ ## À faire -### Sécurité - -- [ ] Permissions (fichiers : 644 - dossiers : 755) -- [ ] .htaccess - --- ## Fait +### Sécurité +- [x] Permissions (fichiers : 644 - dossiers : 755) +- [x] .htaccess + ### Légal - [x] Rédiger les mentions légales - [x] Rédiger la politique de confidentialité diff --git a/site/static/.htaccess b/site/static/.htaccess new file mode 100644 index 0000000..d20fb58 --- /dev/null +++ b/site/static/.htaccess @@ -0,0 +1,137 @@ +# ===================================================== +# 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 +# ----------------------------------------------------- + + + Require all denied + + + +# Bloquer l'accès au fichier .htaccess lui-même + + + Require all denied + + + +# ----------------------------------------------------- +# 3. Headers de sécurité HTTP +# ----------------------------------------------------- + + + + # 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'" + + + + +# ----------------------------------------------------- +# 4. Compression +# ----------------------------------------------------- + + + + AddOutputFilterByType DEFLATE \ + text/html \ + text/plain \ + text/css \ + text/javascript \ + application/javascript \ + application/json \ + application/xml \ + image/svg+xml + + + + +# ----------------------------------------------------- +# 5. Cache navigateur +# ----------------------------------------------------- + + + + 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" + + + + + +# ----------------------------------------------------- +# 6. Désactiver le listing des répertoires +# ----------------------------------------------------- + +Options -Indexes + + +# ----------------------------------------------------- +# 7. Bloquer certains robots agressifs +# ----------------------------------------------------- + + + + SetEnvIfNoCase User-Agent "MJ12bot" bad_bot + SetEnvIfNoCase User-Agent "AhrefsBot" bad_bot + + + Require all granted + Require not env bad_bot + + + \ No newline at end of file