| Configurer Apache - Guide .htaccess |
|
|
| Écrit par Thierry S. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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éfinitionLes 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. Les CommentairesLes 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 AllowOverrideLorsque 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
|
| 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. |
| [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. |
| []+ |
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. 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-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: {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. |
| $ |
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 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 :
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.
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 :
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:
<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:
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:
SetEnv TZ Europe/Paris
ou
SetEnv TZ America/Washington
ou bien Londres
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.
Options All -Indexes
De même, cette règle empêche le serveur de lister le contenu de répertoires:
IndexIgnore *
AddDefaultCharset UTF-8
Limite les requêtes par methode GET et PUT
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
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
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.
<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf)$">
Header set Cache-Control "max-age=2592000"
</FilesMatch>
<FilesMatch ".(js|css|pdf|txt)$">
Header set Cache-Control "max-age=604800"
</FilesMatch>
<FilesMatch ".(html|htm)$">
Header set Cache-Control "max-age=43200"
</FilesMatch>
<FilesMatch "\.(flv|gif|jpg|jpeg|png|ico|js|css|pdf|swf|html|htm|txt)$">
Header set Cache-Control "max-age=5"
</FilesMatch>
<FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
Header unset Cache-Control
</FilesMatch>
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)
<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)
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
AddType application/x-httpd-php .foo
AddType application/x-httpd-cgi .foo
Bloquer les Proxy
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.
<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>
<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>
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>.
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".
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
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) :
SSLOptions +StrictRequire
SSLRequireSSL
SSLRequire %{HTTP_HOST} eq "domain.tld"
ErrorDocument 403 https://domain.tld
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 . 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.
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 :
AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi
Options -ExecCGI
Au lieu de le recopier; référencez le c'est plus élégant et c'est la meilleure manière de me remercier ...

Les Expressions Régulières
|
Ci-dessous quelques tutoriels utiles sur les expressions régulières
|
![]() |
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 ...




