Accueil
Fermer

Publicité

Nos liens web
Les liens utiles
Publicité
Configurer Apache - Guide .htaccess Imprimer Envoyer
Écrit par Thierry S.   
Index de l'article
Configurer Apache - Guide .htaccess
Généralités
Les classes
Les pages d'erreur
Les directives
Autres Tutoriels
Toutes les pages

Serveur Apache

L'objectif de cet article est de couvrir une bonne partie de ce que peut faire une protection par .htaccess ou tout du moins l'essentiel qu'un utilisateur doit être censé savoir pour le comprendre.

Avertissement: suivant votre type d'hébergement et d'hébergeur il est possible que celui-ci désactive l'utilisation du fichier .htaccess ou certaines des fonctionnalités décrites dans cet article. Si la commande AllowOverride est configurée sur "none" par le serveur, les fichiers htaccess ne seront alors pas pris en charge par ce dernier !


Définition

Les fichiers .htaccess sont des fichiers de configuration des serveurs web Apache. Ils peuvent être placés dans n'importe quel répertoire d'un site web (la configuration s'applique au répertoire parent et de tous les sous-répertoires, qui n'ont pas de tel fichier à l'intérieur) ces fichiers peuvent être modifiés à tout moment alors que le serveur est en cours d'exécution.
On peut les utiliser pour modifier les droits d'accès, protéger l'accès à un dossier par un mot de passe, créer des redirections, écrire des messages d'erreur personnalisés,définir des règles de réécriture d'URL ou associer les extensions de fichier.
Les fichiers .htaccess sont exécutés par le serveur avant tout autre script.
Les directives du . htaccess  changent le niveau de sécurité sans nécessiter de configuration direct du serveur Apache (httpd.conf).
Toutefois, pour des raisons de performance et de sécurité, le principal fichier de configuration (httpd.conf) doit toujours être utilisé pour le serveur directives autant que possible.

Les Commentaires

Les commentaires sont nécessaires pour maintenir le contrôle d'une portion de code en cause. Pour mettre en commentaire une directive le signe dièse #  est ajouté en début de ligne.Ainsi chaque ligne de commentaires commençant par le signe dièse # , permettent d'instruire des observations s'étendant sur plusieurs lignes dans le fichier . htaccess et ne seront pas exécuter en tant que directive. Il est sage de ne comporter que des caractères alphanumériques en tant que commentaires.

Même la moindre erreur de syntaxe (comme un manque d'espace) peut entraîner de graves dysfonctionnements du serveur. Ainsi, il est crucial de faire des copies de sauvegarde de tout ce qui a trait à votre site (y compris les  fichiers . htaccess ) avant toute intervention. Il est également important de vérifier de manière approfondie l'ensemble de votre site Web après toutes modifications sur vos. htaccess. Si des erreurs ou autres problèmes sont rencontrés, utilisez vos sauvegardes pour restaurer rapidement toutes les fonctionnalités de votre site.

Performances et AllowOverride

Lorsque la directive AllowOverride est définie de façon à autoriser l'utilisation des fichiers .htaccess et doit être activé dans la configuration de serveur de fichiers, Apache va rechercher leur présence dans chaque répertoire. Ainsi, permettre l'utilisation des fichiers .htaccess est déjà en soi une cause de dégradation des performances, que vous utilisiez effectivement ces fichiers ou non ! De plus, le fichier .htaccess est chargé en mémoire chaque fois qu'un document fait l'objet d'une requête.

# augmenter les performances en désactivant Allowoverride 
AllowOverride None

Activer AllowOverride

Pour les directives qui exigent AllowOverride ( comme FollowSymLinks (voir ci-dessus)), la directive suivante doit être ajoutée dans le fichier de configuration du serveur. Pour des considérations de performance, il est important de ne permettre AllowOverride que dans le ou les répertoires dans lesquel il est requis.
Dans le code suivant, nous permettons la directive AllowOverride seulement dans le répertoire spécifié (/ www / remplacer /ce / par/ actuel/ répertoire).

# activer privileges Allowoverride  
<Directory /www / remplacer /ce / par/ actuel/ répertoire>
AllowOverride Options
</Directory>

Note: Il est évident que par les temps qui courent choisir entre preformance et sécurité par .htaccess; donc Allowoverride activé sans hésiter un seul instant.
Si vous lisez les conseils donnés pour l'administration d'un serveur Apache vous constaterez qu'il est conseillé pour des raisons de preformances de mettre Allowoverride sur none, ce qui n'est valable que pour un serveur privé, fort heureusement cette directive est activée sur la plupart des hebergements mutualisés afin justement que vous puissiez personnaliser la sécurité de votre domaine par .htaccess.


Regex et définitions des caractères et flags (drapeaux) pour htaccess

Classe
Type
Description
[F]
Interdit
Instruit au serveur de retourner un 403 Forbidden au client.
[L]
Dernière règle

Instruit au serveur d'arrêter la réécriture après que la directive précédente est été traitée.Permet de sortir prématurément d'une boucle.

[N]
Suivant
Apache se charge de relancer la règle de réécriture jusqu'à ce que toutes les directives de réécriture soient atteintes.
[G]
Gone
Instruit au serveur d'informer Gone (n'existe plus) message d'état.
[P]
Proxy
Instruit au serveur de traiter les demandes par mod_proxy
[C]
Chaînage

Instruit au serveur de chaîner la règle actuelle avec la ou les règles précédentes jusqu’à la première règle ne se terminant pas par [C]

Apache interprète ce flag comme suit : s’il y a réécriture (la règle est vérifiée), la règle suivante est exécutée avec la chaîne réécrite en entrée.
Si la règle ne se vérifie pas, toutes les règles qui suivent jusqu’à la première ne comportant pas le flag [C] ne sont pas appliquées.

[R]
Redirection
Instruit Apache de délivrer une redirection, ce qui provoque au navigateur une demande vers la réécriture / URL.
[NC]
No Case
Instruit Apache de traiter la directive en restant insensible à la casse.
[PT]
Pass Through

Instruit le mod_rewrite de passer l'URL réécrite à Apache après pour un futur traitement.

[OR]
OR
"OU" est un Opérateur logique qui permet de lier ensemble plusieurs expressions, il suffit que l'une des expressions soit vraie pour que le règle s'applique voir table de vérité.
[NE]
No Escape
Instruit le serveur d'analyser le résultat sans échapper caractères.
[NS]
No Subrequest
Instruit le serveur de passer (sauter) la directive si c'est une sous requête interne
[S=x]
Skip

Instruit le serveur de sauter la/les prochaines "x" nombre de règles, si une correspondance est trouvée.

[E=variable:value]
variable d'environnement
Instruit le serveur de donner la valeur d'une variable d'environnement.
[T=MIME-type]
Mime Type
déclare le type de format de fichier de la ressource cible
[]
les crochets

Les crochets sont principalement utilisées pour définir une série de caractères correspondant à une classe.

exemple: [xyz] correspond soit un x, y ou z

[]+
les parenthèses +
Combinaison de classe de caractères à l'intérieur des crochets avec tout autre caractère.

exemple: [xyz]+ définit tout ensemble de caractères associé aux caractère entre crochets. est valide xs, ys, zs, ou toute autre combinaison avec ces caractères.
[^]
spécifie la classe d'un caractère qui n'est pas compris entre crochets

Sera définit valide tous caractères à l'exeption de ceux entre crochets.
par exemple: [^ xyz] définit tout alphabétique qui n'est ni x, ni y, ni z.

exemple: [^/.] définit tout caractère qui n'est ni slash , ni un point.

exemple: [^/.]+ définit tout ensemble de caractères qui ne contient ni slash , ni un point.

[a-z]
spécifie la fouchette d'une classe de caractères

le tiret (-) entre deux caractères dans une classe de caractères entre crochets désigne la gamme de caractères entre eux.

exemple: [a-v] définit tout alphabétique compris entre a et v

exemple: [a-zA-Z] définit tout alphabétique minuscules et les majuscules de a à z.

exemple: [a-p0-8] définit tout alphabétique en minuscule compris entre a et p et définit tout numérique compris entre 0 et 8.

[QSA]
Query String Append
Rajoute le QUERY_STRING à la fin de l’expression, après la réécriture. A réserver pour la dernière règle de réécriture. Utilisée le plus souvent avec le flag [L], comme dans [QSA,L]
Type
Description
( )
parenthèses
utilisées pour grouper ensemble de caractères en les considérant comme une seule unité.
Les parenthèses autour d'une regex permettent de capturer le contenu qui correspond à cette regex
Le contenu est stocké dans une variable appelée $1. Si il existe plusieurs parenthèses dans une même regex, alors les variables $2, $3, etc.. seront utilisées.

exemple: la regex "(palpitation)" retourne valide pour "nation"
{ }
accolades

Définissent une répétition On utilise la virgule pour donner les bornes de l'intervalle de répétition.

exemple: la regex ".{2,6}" correspond à une suite de 2 à 6 caractères quelconques.

cette répétition est en fait une sorte de boucle infinie (while) tant que.

exemple: {HTTP_USER_AGENT} tant que la variable d'environnement

^
ancrage de début de chaîne

Iindique le début d'une regex (regex =expressions régulières ) chaîne de test.

exemple :" ^$" définit une chaîne vide.
exemple : "^.*$" le modèle standard pour toutes les correspondances
exemple: ^domain.* définit une chaîne qui commence avec le terme domain qui est précédée de n'importe quel caractère.

$
ancrage de fin de chaîne
Iindique la fin d'une regex (regex =expressions régulières ) chaîne de test.
Est placé après la toute dernière lettre de la dernière ligne de la procédure.

exemple: ^domain\.com$ définit la chaîne domain.com
+
plus

Correspond à un ou de plusieurs du ou des précédents caractères. Le plus + est presque comme l'étoile *, au détail près que la suite doit comporter au moins une occurence.

exemple: "a+" correspond en fait à une suite de 1 ou plusieurs a, et donc est équivalent à "aa*".

exemple: "^abc+": chaine qui commence par "ab" suivie de un ou plusieurs "c" ("abc", "abcc" etc..)

-
tiret
Instruit "de ne pas" réécrire l'URL
*
étoile
Signifie "le caractère ou la régex précédent(e) répété(e) de 0 à plusieurs fois".
exemple: la regex "a*" signifie une suite de 0 ou plusieurs a.
exemple: la regex ".*" signifie une suite de 0 ou plusieurs caractères quelconques.
.
point
signifie "nimporte quel caractère".
#
dièse
Le # charge le serveur d'ignorer la ligne. utilisés pour inclure des commentaires. chaque ligne de commentaires exige son propre # , il est de bonne pratique d'utiliser uniquement des lettres, des chiffres, des tirets et caractères de soulignement. cette pratique contribuera à éliminer / éviter les éventuelles erreurs d'analyse du serveur .
\
antislash
Sert pour échapper les caractères spéciaux ^ $ ! . * |

exemple, utilisez \. pour échapper un point.
|
pipe
déclare une logique "ou"
exemple: "(x|y)" correspond si x ou y est trouvé.
!
exclamation
déclare la négation (pas). par exemple, !string correspond à tout sauf string
?
Interrogation
Déclare que le caractère précédent est optionel.

exmple: "abc?" chaine qui contient "ab" suivie de aucun ou un "c" considère valide si trouvé ("ab" ou "abc")
Description
-d Teste si la chaîne de caractères est un répertoire existant.
-f Teste si la chaîne de caractères est un fichier existant.
-s Teste si le fichier en chaîne de test a une valeur non nulle.

 


La gestion des pages d'erreurs

Il existe plusieurs manière de renvoyer la raison d'une erreur dans toutes dans cette exemple j'ai choisi un script .php qui va justement prendre en charge la plupart des redirections d'erreurs (tout en un) car il n'y a rien de plus énervant un visiteur que d'arriver sur une page blanche avec les mots "Erreur 404" lorsque l'URL indiquée est incorrecte. Pour y remédier, il suffit de créer sur le site une page d'erreur personnalisée et plus conviviale (page_d_erreur.php dans l'exemple) et on placera les directives suivantes dans le fichier .htaccess

# ErrorDocument
ErrorDocument 204 http://mon_site/page_d_erreur.php?error=204
ErrorDocument 401 http://mon_site/page_d_erreur.php?error=401
ErrorDocument 403 http://mon_site/page_d_erreur.php?error=403
ErrorDocument 404 http://mon_site/page_d_erreur.php?error=404
ErrorDocument 408 http://mon_site/page_d_erreur.php?error=408
ErrorDocument 410 http://mon_site/page_d_erreur.php?error=410
ErrorDocument 500 http://mon_site/page_d_erreur.php?error=500
ErrorDocument 502 http://mon_site/page_d_erreur.php?error=502
ErrorDocument 503 http://mon_site/page_d_erreur.php?error=503
ErrorDocument 504 http://mon_site/page_d_erreur.php?error=504

 

voir le code source de la page personnalisée page_d_erreur.php


Les codes de Redirection

Ce sont les codes que vous voyez lorsque le navigateur n'arrive pas à vous fournir la page demandée. Le code de réponse est constitué de trois chiffres : le premier indique la classe de statut et les suivants la nature exacte de l'erreur.


Code
Message
Description
10x
Message d'information
Ces codes ne sont pas utilisés dans la version 1.0 du protocole
20x
Réussite
Ces codes indiquent le bon déroulement de la transaction
200
OK
La requête s'est accomplie correctement
201
CREATED
Elle suit une commande POST, elle indique la réussite, le corps du reste du document est sensé indiquer l'URL à laquelle le document nouvellement créé devrait se trouver.
202
ACCEPTED
La requête a été acceptée, mais la procédure qui suit n'a pas été accomplie
203
PARTIAL INFORMATION
Lorsque ce code est reçu en réponse à une commande GET, cela indique que la réponse n'est pas complète.
204
NO RESPONSE
Le serveur a reçu la requête mais il n'y a pas d'information à renvoyer
205
RESET CONTENT
Le serveur indique au navigateur de supprimer le contenu des champs d'un formulaire
206
PARTIAL CONTENT
Il s'agit d'une réponse à une requête comportant l'en-tête range. Le serveur doit indiquer l'en-tête content-Range
30x
Redirection
Ces codes indiquent que la ressource n'est plus à l'emplacement indiqué
301
MOVED
Les données demandées ont été transférées à une nouvelle adresse
302
FOUND
Les données demandées sont à une nouvelle URL, mais ont cependant peut-être été déplacées depuis...
303
METHOD
Cela implique que le client doit essayer une nouvelle adresse, en essayant de préférence une autre méthode que GET
304
NOT MODIFIED
Si le client a effectué une commande GET conditionnelle (en demandant si le document a été modifié depuis la dernière fois) et que le document n'a pas été modifié il renvoie ce code.
40x
Erreur due au client
Ces codes indiquent que la requête est incorrecte
400
BAD REQUEST
La syntaxe de la requête est mal formulée ou est impossible à satisfaire
401
UNAUTHORIZED
Le paramètre du message donne les spécifications des formes d'autorisation acceptables. Le client doit reformuler sa requête avec les bonnes données d'autorisation
402
PAYMENT REQUIRED
Le client doit reformuler sa demande avec les bonnes données de paiement
403
FORBIDDEN
L'accès à la ressource est tout simplement interdit
404
NOT FOUND
Classique! Le serveur n'a rien trouvé à l'adresse spécifiée. Parti sans laisser d'adresse... :)
50x
Erreur due au serveur
Ces codes indiquent qu'il y a eu une erreur interne du serveur
500
INTERNAL ERROR
Le serveur a rencontré une condition inattendue qui l'a empêché de donner suite à la demande (comme quoi il leur en arrive des trucs aux serveurs...)
501
NOT IMPLEMENTED
Le serveur ne supporte pas le service demandé (on ne peut pas tout savoir faire...)
502
BAD GATEWAY
Le serveur a reçu une réponse invalide de la part du serveur auquel il essayait d'accéder en agissant comme une passerelle ou un proxy
503
SERVICE UNAVAILABLE
Le serveur ne peut pas vous répondre à l'instant présent, car le trafic est trop dense (toutes les lignes de votre correspondant sont occupées veuillez rappeler ultérieurement)
504
GATEWAY TIMEOUT
La réponse du serveur a été trop longue vis-à-vis du temps pendant lequel la passerelle était préparée à l'attendre (le temps qui vous était imparti est maintenant écoulé...)

 


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 ... Complice

Les Expressions Régulières

Ci-dessous quelques tutoriels utiles sur les expressions régulières
encore de la lecture !!!?

 

Les expressions régulières sur le site du zero Tuto partie 1
Les expressions régulières sur le site du zero Tuto partie 2
Memo pour les REGEX sur le site du zero Memo

Les expressions régulières PCRE (Perl Compatible Regular Expressions) et test des regex

Rédaction en cours ...

Mise à jour le Samedi, 17 Octobre 2009 22:52
 
Powerd by Web-Infoservice
rentabilisez votre site aujourd'hui !
XHTML Validation
CSS Validation
Flux Rss