Le fichier .htaccess
permet d’appliquer des règles de sécurité au niveau d’un répertoire (et de ses sous-répertoires) sur un hébergement Apache/cPanel. Bien configuré, il réduit fortement les risques d’intrusion, de divulgation d’informations et d’abus de ressources.
Pré-requis et bonnes pratiques
- Sauvegardez votre fichier
.htaccess
actuel (ex..htaccess.bak
). - Placez les règles à la racine du site (
/public_html
) et, au besoin, dans certains sous-dossiers (ex.uploads
,tmp
). - Après chaque modification, testez immédiatement : une erreur de syntaxe peut provoquer un HTTP 500.
- Sur nos hébergements, des protections serveur (pare-feu, ModSecurity, etc.) sont déjà actives. Le
.htaccess
vient en complément.
Désactiver l’indexation des répertoires
Empêche l’affichage de la liste des fichiers si aucun index n’est présent.
Options -Indexes
Masquer la version d’Apache/PHP et désactiver les signatures
Évite la divulgation d’informations utiles aux attaquants.
ServerSignature Off
Bloquer l’accès aux fichiers sensibles
Interdit l’accès web à des fichiers de configuration, d’environnement ou de sauvegarde.
<FilesMatch "\.(env|ini|log|bak|sql|yml|yaml)$"> Require all denied </FilesMatch> # Protéger le .htaccess lui-même <Files ".htaccess"> Require all denied </Files>
Empêcher l’exécution de scripts dans les dossiers d’upload
À placer dans le(s) dossier(s) de téléversement (ex. public_html/wp-content/uploads/.htaccess
).
php_flag engine off RemoveHandler .php .phtml .php3 .php4 .php5 .php7 .php8 RemoveType .php .phtml .php3 .php4 .php5 .php7 .php8 <FilesMatch "\.(php|phtml|php[0-9])$"> Require all denied </FilesMatch>
Limiter les méthodes HTTP autorisées
Réduit la surface d’attaque aux méthodes nécessaires.
<LimitExcept GET POST HEAD> Require all denied </LimitExcept>
Activer des en-têtes de sécurité (recommandé)
Ajoute des protections côté navigateur. Adaptez la CSP à votre site (domaines de scripts, fonts, images…).
<IfModule mod_headers.c> Header always set X-Frame-Options "SAMEORIGIN" Header always set X-Content-Type-Options "nosniff" Header always set Referrer-Policy "strict-origin-when-cross-origin" Header always set Permissions-Policy "geolocation=(), microphone=(), camera=()" # Exemple CSP minimaliste à personnaliser : Header always set Content-Security-Policy "default-src 'self'; img-src 'self' data: https:; script-src 'self'; style-src 'self' 'unsafe-inline' https:; font-src 'self' https: data:" </IfModule>
Forcer le HTTPS (si non activé via cPanel)
Si vous n’utilisez pas la redirection HTTPS des “Domaines” dans cPanel, appliquez-la ici.
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Activer HSTS (option avancée)
Signale aux navigateurs d’utiliser uniquement HTTPS. À n’activer qu’une fois le site 100% compatible HTTPS (sinon risque de blocage).
<IfModule mod_headers.c> Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains; preload" </IfModule>
Réduire les scans et hotlinking
Bloquer le hotlinking (affichage de vos images depuis d’autres sites) :
RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^https?://(www\.)?votredomaine\.com/ [NC] RewriteRule \.(jpg|jpeg|png|gif|webp)$ - [F,NC,L]
Protéger certaines zones par mot de passe (Basic Auth)
Idéal pour un répertoire d’administration ou un espace de préproduction.
AuthType Basic AuthName "Zone protégée" AuthUserFile /home/UTILISATEUR/.htpasswds/mon-dossier/passwd Require valid-user
Créez le fichier de mots de passe via cPanel > Répertoires protégés par mot de passe ou avec htpasswd
.
Filtrer quelques User-Agents agressifs (optionnel)
Peut limiter l’impact de certains bots. À utiliser avec parcimonie.
BrowserMatchNoCase "badbot|crawlerbot|spamBot" bots <RequireAll> Require all granted Require not env bots </RequireAll>
Dépannage
- Erreur 500 après modification : restaurez votre sauvegarde et réintroduisez les règles une par une.
- Conflits possibles avec des règles générées par des CMS/plug-ins (WordPress, Joomla, cache). Fusionnez prudemment.
- Si vous utilisez un CDN/proxy (Cloudflare), vérifiez que les en-têtes ne sont pas doublés ou filtrés.
En résumé
Le .htaccess
est un levier simple et puissant pour renforcer la sécurité : masquage d’informations, contrôle d’accès, blocage d’exécutions indésirables, en-têtes de sécurité et redirection HTTPS. Combinez ces règles avec des mises à jour régulières de votre CMS/plug-ins et des mots de passe robustes pour un niveau de protection élevé.