jeudi, août 15, 2024
Comment protéger son site web grâce au .htaccess
.htaccess ? à quoi ça sert
Dans cet article, nous verront comment protéger son site web grâce au .htaccess.
De façon général, les fichiers .htaccess comprennent une série de directives permettant de gérer des tâches courantes telles que la réécriture d’URL, la sécurité et les performances. Voici un exemple de base de fichier .htaccess :!
# Activer le moteur de réécriture
RewriteEngine On
# Rediriger www vers non-www (changez example.com par votre domaine)
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
# Rediriger HTTP vers HTTPS (si SSL est activé)
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
# Définir la page d'index par défaut
DirectoryIndex index.php index.html
# Désactiver la navigation dans les répertoires
Options -Indexes
# Bloquer l'accès au fichier .htaccess lui-même
<Files .htaccess>
Order Allow,Deny
Deny from all
</Files>
# Activer la compression Gzip
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/atom+xml
AddOutputFilterByType DEFLATE application/x-httpd-php
AddOutputFilterByType DEFLATE application/x-httpd-fastphp
AddOutputFilterByType DEFLATE application/x-httpd-php-source
</IfModule>
# Utiliser la mise en cache du navigateur
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType text/html "access plus 1 minute"
ExpiresByType application/pdf "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
</IfModule>
# Définir les en-têtes de sécurité
<IfModule mod_headers.c>
Header set X-Content-Type-Options "nosniff"
Header set X-XSS-Protection "1; mode=block"
Header set X-Frame-Options "SAMEORIGIN"
</IfModule>
# Pages d'erreur personnalisées
ErrorDocument 404 /404.html
ErrorDocument 500 /500.html
# Désactiver la signature du serveur
ServerSignature Off
Ce fichier peut servir de point de départ pour une protection basique de votre site web et à partir de là vous pouvez l’adapter et ajouter d’autres règles qui correspondent le mieux à votre environnement, et à vos besoins spécifiques.
Points clés:
- Redirection d'URL : Redirection de www vers non-www et de HTTP vers HTTPS si le protocole SSL est activé.
- Index de répertoire : Spécifie les fichiers par défaut à charger lors de l'accès à un répertoire.
- Navigation dans les répertoires : Désactive la navigation dans les répertoires.
- Accès aux fichiers : Protège le fichier .htaccess lui-même.
- Compression : Active la compression Gzip pour de meilleures performances.
- Mise en cache : exploite la mise en cache du navigateur pour améliorer les temps de chargement.
- En-têtes de sécurité : Ajoute des en-têtes HTTP liés à la sécurité.
- Pages d'erreur personnalisées : Dirige vers des pages d'erreur personnalisées pour les erreurs 404 et 500.
- Signature du serveur : Masque les informations relatives à la version du serveur pour des raisons de sécurité.
Aller plus loin....
La sécurité étant essentielle pour un site web, nous vous proposons quelques astuces de sécurité supplémentaires que vous pouvez ajouter à votre fichier .htaccess
1. Protéger les fichiers sensibles
Empêchez l’accès aux fichiers de configuration sensibles comme wp-config.php
(si vous utilisez WordPress)ou d’autres fichiers de configuration spécifiques :
# Protéger les fichiers de configuration
<Files wp-config.php>
Order Allow,Deny
Deny from all
</Files>
2. Limiter l'accès à certaines IP
Vous pouvez restreindre l’accès à certaines parties de votre site (comme l’administration par exemple) à des adresses IP spécifiques. Il faut noter qu’il s’agit ici d’adresses IP publiques. Remplacer « 41.284.62.58 » par l’adresse que vous souhaitez autoriser, vous pouvez renseigner plusieurs adresses.
# Limiter l'accès à l'administration à une IP spécifique
<Files "admin-ajax.php">
Order Deny,Allow
Deny from all
Allow from 41.284.62.58
</Files>
3. Interdire l'accès à certains fichiers
Interdisez l’accès à certains fichiers et répertoires sensibles :
# Interdire l'accès aux fichiers .env, .git, .gitignore, etc.
<FilesMatch "\.(env|git|gitignore|svn|bak|orig)$">
Order Allow,Deny
Deny from all
</FilesMatch>
# Interdire l'accès aux répertoires cachés
RedirectMatch 403 /\..*$
4. Activer la protection contre les attaques XSS
Assurez-vous que les navigateurs bloquent les attaques XSS (Cross-Site Scripting) :
# Protection contre les attaques XSS
Header set X-XSS-Protection "1; mode=block"
5. Prévenir le détournement de clics (Clickjacking)
Protégez votre site contre les attaques de détournement de clics :
# Protection contre le détournement de clics
Header always append X-Frame-Options SAMEORIGIN