|
Page 5 sur 6
Activer la base Rewriting
Certains serveurs ne sont pas configurés avec mod_rewrite activé par défaut. Pour vous assurer que mod_rewrite (réécriture de base) est activé sur votre site, ajoutez la ligne suivante à votre fichier htaccess qui se trouve à la racine de votre site :
# activer basic rewriting RewriteEngine on
Activer les liens symboliques
Activer les liens symboliques (symlinks) en ajoutant la directive suivante dans le répertoire cible du fichier htaccess. Note: Pour la directive FollowSymLinks tout comme AllowOverride; les privilèges doivent être activés dans le fichier de configuration de serveur.
# activer les liens symboliques Options +FollowSymLinks
Renommez le fichier htaccess (côté serveur)
La plupart de hébergement gardent l'extention .htaccess par défaut mais sachez qu'il vous est possible de renommer cette extention par celle de votre choix. Note: Cette directive doit être ajoutée dans le fichier de configuration du serveur sinon elle ne fonctionnera pas :
# renommer les fichiers htaccess AccessFileName ht.access
Note: Si vous renommez vos fichiers htaccess, n'oubliez pas de mettre à jour les paramètres de configuration associés. Par exemple, si vous protégez vos fichiers via htaccess FilesMatch souvenez-vous d'informer le nouveau nom de fichier:
# Protége les fichiers htaccess renommés <FilesMatch "^ht\."> Order deny,allow Deny from all </FilesMatch>
Désactiver la Signature du serveur
Ici, nous désactivons la signature numérique qui permet d'identifier le serveur:
# desactive la signature du serveur ServerSignature Off
Réglez le fuseau horaire du serveur
Nous sommes ici pour instruction au serveur pour synchroniser chronologiquement en fonction du fuseau horaire spécifié de certains pays:
# mettre le server timezone pour Paris SetEnv TZ Europe/Paris
ou
# mettre le server timezone pour Washington SetEnv TZ America/Washington
ou bien Londres
# mettre le server timezone pour Washington SetEnv TZ Europe/London
Empêcher le listage des répertoires
Habituellement, si votre site ne dispose pas d’une page d’index par défaut tous les fichiers de ce répertoire sont accessibles aux visiteurs. Pour éviter cela utilisez le code suivant.
# Protège si pas d'index dans un repertoire Options All -Indexes
De même, cette règle empêche le serveur de lister le contenu de répertoires:
# empêche le listage de repertoires IndexIgnore *
#Définir la langue le jeu de caractères par défaut AddDefaultCharset UTF-8
Limite les requêtes par methode GET et PUT
Options -ExecCGI -Indexes -All RewriteEngine on RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK|OPTIONS|HEAD) RewriteRule .* - [F]
Processus de sélection de fichiers selon la méthode de demande au serveur
# traiter les fichiers selon la méthode de demande au serveur Script PUT /cgi-bin/upload.cgi Script GET /cgi-bin/download.cgi
Exécuter différents types de fichiers par le biais d'un script CGI
Pour des besoins spéciaux où certains types de fichiers doivent être traités avec certains script cgi
# execute tous les fichiers png par png-script.cgi Action image/png /cgi-bin/png-script.cgi
Améliorer la vitesse de transfert de site, en permettant la mise en cache des fichiers
Comment améliorer la vitesse de transfert de fichier en permettant la mise en cache. Utilisation de temps en secondes * pour indiquer la durée de mise en cache du contenu.
# mettre en cache les images et fichiers flash pour un mois <FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf)$"> Header set Cache-Control "max-age=2592000" </FilesMatch>
# mettre en cache les fichiers javascript, texte,css et pdf pour une semaine <FilesMatch ".(js|css|pdf|txt)$"> Header set Cache-Control "max-age=604800" </FilesMatch>
#mettre en cache les fichiers html et htm pour un jour <FilesMatch ".(html|htm)$"> Header set Cache-Control "max-age=43200" </FilesMatch>
#mettre un cache minimum pendant la durée de construction d'un site <FilesMatch "\.(flv|gif|jpg|jpeg|png|ico|js|css|pdf|swf|html|htm|txt)$"> Header set Cache-Control "max-age=5" </FilesMatch>
#desactive le cache pour les scripts et fichiers dynamiques <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$"> Header unset Cache-Control </FilesMatch>
# methode alternative pour mettre en cache les fichiers ExpiresActive On ExpiresDefault A604800 # 1 week ExpiresByType image/x-icon A2419200 # 1 month ExpiresByType application/x-javascript A2419200 # 1 month ExpiresByType text/css A2419200 # 1 month ExpiresByType text/html A300 # 5 minutes # desactive le cache de scripts et fichiers <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$"> ExpiresActive Off </FilesMatch>
* Convertir des intervalles de temps en secondes: 300 = 5 minutes 2700 = 45 minutes 3600 = 1 heure 54000 = 15 heures 86400 = 1 jour 518400 = 6 jours 604800 = 1 semaine 1814400 = 3 semaines 2419200 = 1 mois 26611200 = 11 mois 29030400 = 1 an = n'expire jamais
Limiter l'accès au réseau local (LAN)
# limiter l'accès au réseau local <Limit GET POST PUT> order deny,allow deny from all allow from 192.168.0.0/33 </Limit>
Déguise les extentions de fichiers
Cette méthode se charge de déguiser tous les types de fichiers (toute extension de fichier) et de les présenter comme des fichiers .php (ou celle de votre choix)
# déguise toutes les extensions de fichier par php ForceType application/x-httpd-php
Planquer les extensions de script
Pour renforcer la sécurité, de dissimuler les langages de script, en remplaçant l'extensions d'origine par celle de votre choix. Par exemple, pour changer le .php par l'extension .foo ajouter la ligne suivante à votre fichier htaccess et renommé tous les fichiers en conséquence
# change toutes les extentions .foo par .php AddType application/x-httpd-php .foo
# change toutes les extentions .foo par .cgi AddType application/x-httpd-cgi .foo
Bloquer les Proxy
RewriteEngine on RewriteCond %{HTTP:VIA} !^$ [OR] RewriteCond %{HTTP:FORWARDED} !^$ [OR] RewriteCond %{HTTP:USERAGENT_VIA} !^$ [OR] RewriteCond %{HTTP:X_FORWARDED_FOR} !^$ [OR] RewriteCond %{HTTP:PROXY_CONNECTION} !^$ [OR] RewriteCond %{HTTP:XPROXY_CONNECTION} !^$ [OR] RewriteCond %{HTTP:HTTP_PC_REMOTE_ADDR} !^$ [OR] RewriteCond %{HTTP:HTTP_CLIENT_IP} !^$ RewriteRule ^(.*)$ - [F]
Protection par le couple .htaccess et .htpasswd
Il est parfois nécessaire de protéger l’accès à un répertoire sur un serveur web (ex : répertoire d’administration, contenant des données sensibles) afin d’éviter que n’importe qui puisse y accéder. Il y a différentes méthodes, ont peut avoir recourt à des langages comme le PHP, ASP, PERL …), mais la méthode la plus simple est d’utiliser le mécanisme de protection d’Apache. C'est-à-dire effectuer une protection à l’aide des fichiers .htaccess et .htpasswd. On estime ici que l’on n’a pas accès au fichier de configuration http.conf.
AuthUserFile indique au serveur Web où trouver le fichier .htpasswd, qui contient les noms d'utilisateurs et les mots de passe associés.ce fichier devra être mis en CHMOD 444 pour eviter sa lecture. AuthGroupFile permet de définir un droit d’accès à un groupe d’utilisateur. Cette solution n’est que rarement utilisée pour un site Web. Le reste du temps il pointe vers /dev/null. Il faut que cette ligne soit présente. AuthName indique le nom de la zone protégée. On peut y mettre ce qu'on veut et sera visible dans la zone de dialogue lors de l'accès. AuthType Basic est le type d'authentification utilisé. C'est le seul actuellement vraiment utilisé. Require valid-user accepte tous les utilisateurs qui ont un login : mot de passe dans .htpasswd. La section Limit permet de donner les directives, comme par exemple "require valid-user" (on pourrait spécifier un ou plusieurs utilisateurs précis avec par exemple require user nom1, nom2). GET et POST sont deux méthodes de la norme HTTP, et là on indique qu'on effectue la restriction sur ces deux méthodes. On peut ne pas mettre de limite, ce qui a pour conséquence d'appliquer les directives à toutes les méthodes.POST est utilisé pour autoriser l’upload de fichiers sous le protocole http.
Ici un générateur de password excellent outils en ligne pour générer vos password.
# protection d'un type de fichiers par password <Files secure.php> AuthType Basic # titre pour la zone de dialogue AuthName "Prompt" # repertoire dans lequel se trouve .htpasswd AuthUserFile /home/path/. htpasswd Require valid-user </Files>
# protection de multiple types de fichiers par password <FilesMatch "^(execute|index|secure|insanity|biscuit)*$"> AuthType basic # titre pour la zone de dialogue AuthName "Developpement" # repertoire dans lequel se trouve .htpasswd AuthUserFile /home/path/. htpasswd Require valid-user </FilesMatch>
# protection du repertoire dans lequel se trouve les user-passwords AuthType basic # titre pour la zone de dialogue AuthName "Répertoire protégé" # repertoire dans lequel se trouve .htpasswd AuthUserFile /home/path/. htpasswd AuthGroupFile /dev/null Require valid-user
Autoriser un ou plusieurs utilisateurs (via l'adresse IP ou nom de domaine) à accéder à un répertoire
En spécifiant l'adresse IP d'une machine, seule cette machine pourra entrer dans la zone protégée sans mot de passe. On peut ajouter autant d'adresse que l'on désire.Avec cette méthode, on peut égalment protéger l'accès à un répertoire à un groupe de machine ou un domaine suivant la précision de l'adresse IP (129.194 ou 129.194.34). La directive Order s'assure que "allow" supplante "deny" et que ce n'est pas le contraire. Il est toujours bon de préciser les choses. En général "allow from all" est la configuration par défaut des serveurs Web. Ces directives peuvent être restreintes à certaines méthodes HTTP comme GET ou POST (mais il y a aussi PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, et UNLOCK) en utilisant une section débutant par exemple par <Limit GET POST> ...directives... </Limit>.
#protection par password d'un répertoire à l'exeption d'un IP AuthType Basic # titre pour la zone de dialogue AuthName "Répertoire perso" # repertoire dans lequel se trouve .htpasswd AuthUserFile /home/path/. htpasswd Require valid-user # autorisation pour cet IP Allow from 82.85.74.68 # autorisation pour ce nom de domaine Allow from .domaine-a.fr Satisfy Any
Autoriser un seul domaine à accéder à un ensemble de fichiers
Cet exemple autorise uniquement les gens d'un établissement (.domaine-a.fr) à visionner les fichiers qui débutent par les lettres "visu".
# repertoire dans lequel se trouve .htpasswd AuthUserFile /home/path/. htpasswd AuthGroupFile /dev/null # titre pour la zone de dialogue AuthName "Zone protégée du cours " AuthType Basic # restriction sur tous les fichiers qui commencent par visu <Files visu*> Order Allow, Deny Deny from all Allow from .domaine-a.fr </Files>
Autoriser deux domaines ou un utilisateur hors domaines-autorisés à accéder à un répertoire
S'il y a à la fois les directives "allow" et "require" dans un même fichier, le serveur a besoin de savoir si le client est supposé remplir toutes les conditions ou bien une seule. Avec le paramètre "any" (au lieu de "all" par défaut) il faut remplir une seul des conditions.Contrôle par mot de passe: si l'on n'accède pas depuis un des domaines précédents il faut fournir un mot de passe
AuthUserFile /home/path/. htpasswd AuthGroupFile /dev/null AuthName "Zone protégée du cours " AuthType Basic Satisfy any Order Deny,Allow Deny from all #2 domaines autorisés Allow from .domaine-a.fr Allow from .domaine-b.com #L'utilisateur Danakyl est autorisé Require user Danaky
Voici une excellente méthode pour SSL (Secure Sockets Layer) :
# méthode SSL SSLOptions +StrictRequire SSLRequireSSL SSLRequire %{HTTP_HOST} eq "domain.tld" ErrorDocument 403 https://domain.tld
# méthode SSL sans le mod_ssl RewriteCond %{HTTPS} !=on [NC] RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
Attribuer un CHMOD sur divers types de fichiers automatiquement
Cette méthode va vous permettre de changer les droits sur les fichiers 'CHMOD)de votre choix , emplyez les directives ci dessous soit dans le htaccess root ou dans un htaccess secondaire d'un sous répertoire si placé en root les chmods seront appliqués pour tous repertoires et ses sous répertoires.
# CHMOD à 400 pour des fichiers privés chmod . htpasswd files 640 chmod . htaccess files 644 chmod php files 600
Protection contre attaque DOS (denial-of-service) en limitant le poid de fichier en upload
Une méthode pour aider à protéger votre serveur contre les attaques DOS implique de limiter la taille maximale autorisée pour le téléchargement de fichiers. Ici, nous limiterons la taille des fichiers envoyés à 10240000 bytes, ce qui équivaut à environ 10 méga-octets. Pour cette règle, les tailles de fichiers sont exprimées en octets. Note: ce code est utile uniquement si vous permettez aux utilisateurs d'uploader des fichiers sur votre site.
# Protection contre attaque DOS LimitRequestBody 10240000
Protection des répertoires en désactivant l'exécution de scripts. voir Contenu dynamique basé sur CGI
Protéger les répertoires de l'exécution de scripts en ajoutant cette règle au fichier htaccess d'un répertoire qui ne comporte pas de script (modifier les types de fichiers en fonction de vos besoins):
En général c'est dans des répertoires ne comportant aucun script que certains scripts malicieux sont insérés lorsque que votre FTP à subit une intrusion (serveur vulnérable)
ExecCGI autorise l'exécution des scripts, si cette option est à -ExecCGI alors le code source du script sera affiché à l'écran. SymLinksIfOwnerMatch fait la même chose que FollowSymLinks mais suit les liens symboliques créer uniquement par l'utilisateur étant propriétaire des fichiers et répertoires. AddHandler indique au serveur qu'il doit traiter tous les fichiers possédant les extensions définies en tant que programmes CGI :
# Protection des répertoires en désactivant l'exécution de scripts AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi Options -ExecCGI
Ici ce termine donc le guide pratique d'introduction au htaccess !! qui je pense devrait vous permettre de moins appréhender la chose. Au lieu de le recopier; référencez le c'est plus élégant et c'est la meilleure manière de me remercier ... 
|