126 lines
5.1 KiB
ApacheConf
126 lines
5.1 KiB
ApacheConf
|
|
# ----------------------------------------------------------------------
|
||
|
|
# OMEGAKUBE — Configuration de sécurité renforcée Apache (.htaccess)
|
||
|
|
# ----------------------------------------------------------------------
|
||
|
|
|
||
|
|
# 1. Désactiver l'exploration des répertoires (Directory Browsing)
|
||
|
|
Options -Indexes
|
||
|
|
|
||
|
|
# 2. Masquer les informations du serveur
|
||
|
|
ServerSignature Off
|
||
|
|
|
||
|
|
# 3. Restriction d'accès aux fichiers sensibles, cachés et de données
|
||
|
|
|
||
|
|
# A. Bloquer les fichiers commençant par un point (comme .git, .env, .htaccess)
|
||
|
|
<FilesMatch "^\.">
|
||
|
|
<IfModule mod_authz_core.c>
|
||
|
|
Require all denied
|
||
|
|
</IfModule>
|
||
|
|
<IfModule !mod_authz_core.c>
|
||
|
|
Order allow,deny
|
||
|
|
Deny from all
|
||
|
|
</IfModule>
|
||
|
|
</FilesMatch>
|
||
|
|
|
||
|
|
# Exception explicite pour le fichier security.txt du dossier .well-known
|
||
|
|
<Files "security.txt">
|
||
|
|
<IfModule mod_authz_core.c>
|
||
|
|
Require all granted
|
||
|
|
</IfModule>
|
||
|
|
<IfModule !mod_authz_core.c>
|
||
|
|
Order deny,allow
|
||
|
|
Allow from all
|
||
|
|
</IfModule>
|
||
|
|
</Files>
|
||
|
|
|
||
|
|
# B. Bloquer les extensions sensibles (Configuration, scripts, logs, bases de données)
|
||
|
|
<FilesMatch "\.(env|md|sql|log|sh|cfg|ini|db|bak|conf)$">
|
||
|
|
<IfModule mod_authz_core.c>
|
||
|
|
Require all denied
|
||
|
|
</IfModule>
|
||
|
|
<IfModule !mod_authz_core.c>
|
||
|
|
Order allow,deny
|
||
|
|
Deny from all
|
||
|
|
</IfModule>
|
||
|
|
</FilesMatch>
|
||
|
|
|
||
|
|
# C. Protection intelligente des fichiers .json
|
||
|
|
# On bloque TOUS les .json du serveur par défaut, SAUF ceux situés dans assets/data/
|
||
|
|
<FilesMatch "\.json$">
|
||
|
|
<IfModule mod_authz_core.c>
|
||
|
|
<If "%{REQUEST_URI} =~ m#^/assets/data/.*\.json$#">
|
||
|
|
Require all granted
|
||
|
|
</If>
|
||
|
|
<Else>
|
||
|
|
Require all denied
|
||
|
|
</Else>
|
||
|
|
</IfModule>
|
||
|
|
<IfModule !mod_authz_core.c>
|
||
|
|
# Sécurité de secours pour les versions d'Apache très anciennes
|
||
|
|
Order allow,deny
|
||
|
|
Deny from all
|
||
|
|
</IfModule>
|
||
|
|
</FilesMatch>
|
||
|
|
|
||
|
|
# 4. Exécution CGI activée par assets/python/.htaccess (plus fiable que FilesMatch racine)
|
||
|
|
|
||
|
|
|
||
|
|
# 5. En-têtes de sécurité HTTP (Recommandations Mozilla Observatory)
|
||
|
|
<IfModule mod_headers.c>
|
||
|
|
# HSTS (Strict-Transport-Security) : Force l'utilisation du HTTPS pour le domaine et les sous-domaines (durée 1 an)
|
||
|
|
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
|
||
|
|
|
||
|
|
# X-Frame-Options : Interdit le chargement du site dans une iframe (protection Clickjacking)
|
||
|
|
Header always set X-Frame-Options "DENY"
|
||
|
|
|
||
|
|
# X-Content-Type-Options : Force le navigateur à respecter le type MIME envoyé (protection contre le sniffing de contenu)
|
||
|
|
Header always set X-Content-Type-Options "nosniff"
|
||
|
|
|
||
|
|
# Referrer-Policy : Ne transmet le referer complet que pour les origines de confiance (HTTPS vers HTTPS interne)
|
||
|
|
Header always set Referrer-Policy "strict-origin-when-cross-origin"
|
||
|
|
|
||
|
|
# Permissions-Policy : Restreint l'utilisation de fonctionnalités matérielles du navigateur pour la vie privée
|
||
|
|
Header always set Permissions-Policy "geolocation=(), microphone=(), camera=()"
|
||
|
|
|
||
|
|
# Content-Security-Policy (CSP) : Contrôle les sources d'où le site peut charger ses scripts, styles et médias.
|
||
|
|
Header always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https://unpkg.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; img-src 'self' https://cdn.discordapp.com data:; frame-src 'self' https://www.youtube.com https://www.youtube-nocookie.com; connect-src 'self'"
|
||
|
|
|
||
|
|
# X-XSS-Protection : Filtre XSS existant dans les anciens navigateurs (mode blocage actif)
|
||
|
|
Header always set X-XSS-Protection "1; mode=block"
|
||
|
|
</IfModule>
|
||
|
|
|
||
|
|
# 6. Règles de réécriture d'URL (mod_rewrite)
|
||
|
|
<IfModule mod_rewrite.c>
|
||
|
|
RewriteEngine On
|
||
|
|
|
||
|
|
# A. Redirection HTTPS automatique et robuste (compatible reverse proxies comme Cloudflare)
|
||
|
|
RewriteCond %{HTTPS} off [OR]
|
||
|
|
RewriteCond %{HTTP:X-Forwarded-Proto} !https
|
||
|
|
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
|
||
|
|
|
||
|
|
# B. Pare-feu applicatif de base (WAF) contre les attaques par injection courantes
|
||
|
|
RewriteCond %{QUERY_STRING} concat.*\( [NC,OR]
|
||
|
|
RewriteCond %{QUERY_STRING} union.*select [NC,OR]
|
||
|
|
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]
|
||
|
|
RewriteCond %{QUERY_STRING} base64_encode.*\( [NC,OR]
|
||
|
|
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
|
||
|
|
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
|
||
|
|
RewriteRule ^(.*)$ - [F,L]
|
||
|
|
|
||
|
|
# C. Redirection des pages inexistantes ou dossiers sans fichier index vers une page 404 personnalisée
|
||
|
|
# Si le fichier demandé n'existe pas
|
||
|
|
RewriteCond %{REQUEST_FILENAME} !-f
|
||
|
|
# Et s'il ne s'agit pas d'un dossier
|
||
|
|
RewriteCond %{REQUEST_FILENAME} !-d
|
||
|
|
RewriteRule ^ pages/404.php [L]
|
||
|
|
|
||
|
|
# Si le dossier demandé n'a aucun fichier d'index valide (index.html ou index.php)
|
||
|
|
RewriteCond %{REQUEST_FILENAME} -d
|
||
|
|
RewriteCond %{REQUEST_FILENAME}/index.html !-f
|
||
|
|
RewriteCond %{REQUEST_FILENAME}/index.php !-f
|
||
|
|
RewriteRule ^ pages/404.php [L]
|
||
|
|
</IfModule>
|
||
|
|
|
||
|
|
# 7. Pages d'erreur Apache natives (fallback de sécurité si mod_rewrite est absent)
|
||
|
|
ErrorDocument 404 /pages/404.php
|
||
|
|
ErrorDocument 403 /pages/404.php
|