Fiche : Protection de votre site
Objet de la fiche :
État de la fiche 
Plan de la fiche :
Avant propos
Cette fiche concerne l'utilisation d'un fichier spécial appelé .htaccess.
Ce simple fichier texte judicieusement placé dans votre site permet d’ajuster finement certains paramètres de votre serveur (Apache) tels que les redirections, les réécritures d’URL, ou les restrictions d’accès. Seules les restrictions d'accès et un certain type de redirections seront détaillés dans cette fiche.
La bonne compréhension de cette page vous permettra de trouver plus aisément des informations et comprendre plus facilement les différentes utilisations, non abordées dans ce document, de ce type de fichier.
Même si les règles de syntaxe du fichier .htaccess sont triviales, la moindre faute se traduira le plus souvent par une "erreur 500" [erreur interne serveur].Si votre hébergement se fait sur un système Unix/Linux et que le serveur Web est de type Apache, le fichier .htaccess est supporté mais cela ne veut pas dire que votre hébergeur en autorise son utilisation (attention :le plus souvent, les hébergements gratuits ont cette fonctionnalité désactivée).
Si votre hébergeur vous a déjà installé un fichier .htaccess sur votre site, avant de le remplacer par le vôtre, copiez-le dans un dossier et laissez-le tel quel. Ne pas l'effacer, l'éditer, le transformer, ou ajouter des éléments.
Comment ça marche?
Le fichier .htaccess est placé dans le répertoire dans lequel il doit agir. Il agit ainsi sur les permissions du répertoire qui le contient et de tous ses sous répertoires. Vous pouvez placer un autre fichier .htaccess dans un sous répertoire d'un répertoire déjà contrôlé par un fichier .htaccess.
Le fichier .htaccess du répertoire parent reste en « activité » tant que les fonctionnalités n'ont pas été réécrites.
Le schéma ci dessous présente un site Internet dont les accès aux répertoires Images et Films sont soumis à une autorisation d'accès définies dans le répertoire MDP. De plus si une erreur se produit dans la navigation on affichera un erreur personnalisée. Tous les fichiers contenus dans les répertoires ne seront pas accessibles en listage.
Le fichier 1
va protéger votre site contre la lecture et le téléchargement de vos
répertoires et afficher un code d'erreur personnalisé.
Le fichier 2 va permettre de demander un login et un mot de passe lors de l'accès à des pages
Internet contenues dans le répertoire Images. Lors de l'appel d'une page
contenue dans ce répertoire, si le login ou le mot de passe n'est pas correct
le serveur ira lire les consignes données dans le fichier .htaccess
1 pour
afficher un message d'erreur personnalisé.
Le fichier 3
va permettre de demander un login et un mot de passe lors de l'accès à des pages Internet contenues
dans le répertoire Films. Le processus de gestion des erreurs est identique a
celui du répertoire Images.
Les fichiers 4
contiennent les listes des login et mot de passe autorisant l'accès aux pages
Internet contenues dans les répertoires Images et Films..
Le fichier 5 va
permettre de verrouiller l'accès au répertoire MDP contenant les login et mot
de passe.
Comment créer le fichier .htaccess
Sous pratiquement tous les systèmes d’exploitation, cela se fait sans problème comme n’importe quel
fichier texte. Windows peut toutefois ne pas accepter la création de ce fichier
tel que souhaité. En effet, .htaccess est vu par Windows comme un fichier sans
nom comportant une extension non standard. Normalement notepad devrez vous
permettre de créer et d'enregistrer ce type de fichier. Si vous rencontrez
des difficultés, enregistrer le comme htaccess.txt, vous le renommerez plus tard sur votre serveur à l’aide de votre
logiciel de transfert ftp.
Attention : Une fois renommé, le fichier doit impérativement se nommer « .htaccess
» (débutant par un point), sinon il sera sans effet.
Comment savoir si votre hébergeur permet-il son utilisation ?
- Créer un sous répertoire temporaire sur votre site, par exemple toto.
- Vérifier que l'on peut lire le répertoire par l'URL htt://votre site/toto. Vous devez obtenir quelque chose de similaire à l'image suivante :
- Créer un fichier .htaccess avec le uniquement le contenu suivant : Options -Indexes.
- Copier ce fichier dans le sous-répertoire toto
- Tentez de relire le sous répertoire par l'URL htt://votre site/toto. Si vous n'obtenez pas une erreur 403 c'est que votre hébergeur ne permet pas de restreindre l'accès.
Personnalisation des erreurs générées par le serveur : Fichier .htaccess 1
Lorsqu’un visiteur arrive sur une page inexistante, interdite ou soumise à des droits d’accès, un message standard est affiché indiquant l’origine de l’erreur. Par exemple, si un visiteur arrive sur une page non autorisée, il verra s’afficher ceci :
Pour disposer de votre propre message d’erreur, il suffit de créer un fichier .htaccess dans le répertoire racine de votre serveur web. La syntaxe (qui doit être respectée à la lettre) est toujours la même : il suffit de mettre ErrorDocument, le numéro de l’erreur ainsi que l’instruction à effectuer.
Différents types d'actions peuvent être effectuées :
- Message personnel simple :
ErrorDocument 404 "Erreur 404 : La page n’existe pas !
- Message personnel personnalisé (chaîne HTML) :
ErrorDocument 414 "<body>Désolé mais votre demande ne peut pas aboutir !<br><br><b>Type d'erreur 414 :</b> Requête trop grande.<br><br><a href="http://monwebfacile.free.fr/">Retrouvez ici l'accueil du site</a>
- Message dans un script :
ErrorDocument 404 "<script LANGUAGE=JavaScript>alert("Document non trouvé !")</script>.
- Message dans une page HTML :
ErrorDocument 404 /AccesInterdit/E400.htm
Nota :
- Dans le cas des messages personnels simples, personnalisés ou d'un script pensez d'ajouter comme directive un guillemet (") suivi de l'information à afficher.
-
Dans le cas d'une page HTML aucune directive n'est requise avant
l'information à afficher. Attention si dans cette page vous insérez des scripts
externes, ou des feuilles de style externes, ou des images il est fortement
conseillé de les référencer en URL absolue :
Exemple
http://monwebfacile.free.fr/Images/monImage.jpg
Voici une petite liste des erreurs intéressantes à personnaliser :
4xx pour les erreurs client, 5xx pour les erreurs serveurs.
- 400 : "Bad request" - Requête HTTP non comprise par votre serveur.
- 401 : "Unauthorized" - Le client doit fournir un mot de passe.
- 403 : "Forbidden" - Votre serveur refuse de traiter la requête. Ce type d'erreur est notamment remontée lorsque le client tente d'accéder à des fichiers protégés.
- 404 : "Not Found" - La requête ne correspond à aucun document sur votre serveur.
- 405 : "Method Not Allowed" - La méthode utilisée par le client n'est pas acceptée par votre serveur.
- 406 : "Not Acceptable" - Le document spécifié par la requête ne peut renvoyer une réponse compatible avec les headers acceptés par le client.
- 407 : "Proxy Authentication Required" - Erreur remontée par votre éventuel proxy, signifiant qu'une identification du client est nécessaire pour transmettre la requête à votre serveur web.
- 408 : "Request Time-out" - Time-out du client. Connexion abandonnée.
- 410 : "Gone" - Le document pointé par l'URL n'existe plus. Cette erreur signifie au client que le document existait avant.
- 413 : "Request Entity Too Large" - Contenu de la requête trop grand.
- 414 : "Request-URI Too Long" - Requête trop grande.
- 415 : "Unsupported Media Type" - Format du contenu de la requête non supporté par la méthode utilisée.
- 417 : "Expectation Failed" - Le comportement (champ Expect request-header) demandé par le client n'est pas possible sur votre serveur.
- 500 : "Internal Server Error" - Votre serveur a rencontré une erreur l'empêchant d'exécuter la requête.
- 501 : "Not Implemented" - Votre serveur ne reconnaît pas la fonctionnalité demandée par le client.
- 503 : "Service Unavailable" - Votre serveur ne peut traiter la requête en raison d'une surcharge temporaire
Test d'accès à un document qui n'existe pas |
 |
|
Télécharger mon fichier .htaccess racine (1)
Protection contre la lecture et le téléchargement de vos répertoires:
Fichier .htaccess
1
Si vous rajoutez la ligne suivante au fichier .htaccess du répertoire
racine ou dans un répertoire spécifique vous allez protéger votre site contre la lecture et le téléchargement du
répertoire ou se trouve le fichier .htaccess. Tous les sous répertoires
seront automatiquement eux aussi protégés.
# Accés interdit en consultations des répertoires # Options -Indexes
Autorisation d'accès à vos pages web Fichiers .htaccess
2 , 3
La restriction d’accès par mot de passe
Dans le cadre des hébergements sur serveur Apache, il est aisé de soustraire
certains répertoires à la curiosité du public.
Le mode opératoire en est simple et s’appuie sur 2 fichiers : le fichiers .htaccess
et un deuxième fichier qui
contiendra les noms et mots de passe des personnes autorisées à accéder au
contenu du répertoire.
Le contenu du fichier .htaccess, est le suivant :
AuthFile MDP/TblU_Tutos.txt
AuthGroupFile /dev/null
AuthName "Accés réservé à des utilisateurs référencés"
AuthType Basic
<Limit GET POST>
require valid-user
</Limit>
Analysons de plus près ces quelques lignes :
AuthUserFile
Donne le répertoire dans lequel se trouve le fichier contenant les paires
login/mot de passe des visiteurs autorisés. Il s'agit du chemin d’accès depuis la racine du serveur.
AuthGroupFile /dev/null
Permet de donner un droit d’accès à un ensemble d’utilisateurs faisant partie
d’un même groupe et est rarement utilisée dans le cas de sites Web personnels.
Dans l’exemple, le fichier « /dev/null » est l’équivalent Unix de « nulle-part »
ou « pas de fichier spécifique »
AuthName "Accés réservé à des utilisateurs référencés"
Chaîne de caractère qui apparaîtra dans la boîte de dialogue au moment de la saisie du nom et du mot de passe.
AuthType Basic
Détermine le type d’authentification utilisé, dans notre cas l’authentification HTTP standard.
<limit GET POST> ... </limit>
Détermine le type d’opérations permises. GET s’applique à la majorité des pages
Web, PUT est utilisé par certains scripts ou éditeurs pour faire de l’upload
sous protocole http. Il est important de mettre GET et POST en majuscule sur les
dernières versions d’Apache.
require valid-user
Signifie littéralement qu’un utilisateur valide est requis, à savoir un
utilisateur pour le nom duquel une ligne existe dans le fichier des login et mot
de passe. Une variante pourrait être :
require user pierre paul
pour limiter l’accès aux seuls utilisateurs pierre et paul.
Le fichier des login et mot de passe : Fichiers .htaccess
4
Pour chaque utilisateur autorisé ce fichier texte, dont le répertoire et le
nom sont précisés dans le paramètre AuthFile décrit précédemment,
contient sur chacune des ses lignes le nom de chaque utilisateur suivi des deux
points (:), puis du mot de passe crypté (solution recommandée) ou en clair. Le
cryptage.
Cela donne par exemple :
Pierre:motdepassepierre
Lucien:motdepasselucien
# Hector:motdepassehector en cryptage#
Hector:$1$f5hFQAaE$O2ywpRG/2eUoAiazqQNJ71
Attention : chez certains hébergeur comme free, le cryptage des mots de passe n'est pas pris en compte.
Voici un formulaire ci-dessous afin de crypter votre mot de passe pour
ensuite l'utiliser dans votre fichier .htaccess. Ce cryptage ne convient
pas pour tous les usages. Si par exemple vous voulez crypter un mot de passe en
MD5 ou générer un mot de passe aléatoire, utilisez les rubriques adaptées...
Protéger le fichier des login et mot de passe Fichiers .htaccess
5
Afin d'interdire à un malveillant de lire ces fichier de mots de
passe, il est important d'interdire leur accès en lecture.
La méthode la plus simple consiste à toujours placer les fichier des mots de
passe dans un répertoire, interdit à toute visite avec un nouveau fichier .htaccess placé dans ce
même répertoire.
Un fichier .htaccess réalisant cette interdiction est renseigné comme suit :
deny from all
Déplacement de pages, répertoires, site
Il est parfois nécessaire de déplacer certaines pages ou répertoires d’un site
dans l’optique d’une restructuration. Ceci ne va pas sans poser quelques
problèmes inhérents au changement d’adresse : la page n’est plus accessible pour
les visiteurs qui l’ont mise dans leurs favoris et
les références à cette page dans les moteurs de recherche et annuaires pointent
vers l’ancienne adresse.
Dans ces deux cas de figure, plutôt que de présenter une page d’erreur
personnalisée au visiteur, il est beaucoup plus élégant de le rediriger
automatiquement vers la nouvelle adresse. Ici encore, le fichier .htaccess
est très indiqué.
C'est tout de même
le genre de truc à éviter fortement si on veut s'y retrouver! . Tout de même
cela peut s'avérer utile lorsque l'on désire muter l'ensemble du site d'un
hébergeur vers un nouvel hébergeur.
Déplacer une page :
RedirectPermanent ancien.html http://www.domaine.tld/nouveau.html
Cette directive signale au navigateur que la page ancien.html a été renommée
nouveau.html et renvoie l’entête correcte au navigateur pour signaler ce fait
(entête 301 "déplacement permanent"). L’avantage de cette approche est que les
robots d’indexation des différents moteurs apprendront que cette page a été
déplacée et modifieront leur index pour refléter la nouvelle adresse.
Déplacer un répertoire :
RedirectPermanent /ancien http://www.domaine.tld/nouveau/
Nota : Dans ces 2 cas d’utilisation de la directive RedirectPermanent, la nouvelle adresse de page ou de répertoire doit être une
URL complète.
Changer de nom de domaine (site) :
RedirectPermanent / http://www.nouveaudomaine.tld/
redirigera la racine de l’ancien site vers le nouveau site.
Note : Seuls les moteurs de recherche ajusteront leur index pour refléter la
nouvelle adresse. N’oubliez pas de demander aux annuaires de modifier leurs
liens vers vos pages.
Empêcher l'accès à fichier particulier
Par défaut, Apache applique les restrictions du fichier .htaccess à l'ensemble
des fichiers du répertoire dans lequel il se trouve ainsi qu'à tous les fichiers
contenus dans ses sous-répertoires.
Il est également possible de restreindre l'accès pour un ou plusieurs fichiers
du répertoire grâce à la balise <Files>.
Voici un exemple de restriction aux fichiers admin.php3 et admin2.php3 :
<Files admin.php3>
AuthUserFile /repertoire/de/votre/fichier/.FichierDeMotDePasse
AuthGroupFile /dev/null
AuthName "Accès sécurisé au site CCM"
AuthType Basic
<LIMIT GET POST>
require user JFPillou
</LIMIT>
</Files>
<Files admin2.php3>
AuthUserFile /repertoire/de/votre/fichier/.FichierDeMotDePasse
AuthGroupFile /dev/null
AuthName "Accès sécurisé au site CCM"
AuthType Basic
<LIMIT GET POST>
require user JFPillou
</LIMIT>
</Files>
Récupérer les informations de login et password au niveau de la page php
Si vous avez protégé un dossier de votre site en utilisant un fichier .htaccess et que vous souhaitez récupérer dans vos pages PHP le login et le mot de passe que l'utilisateur a saisis, il vous suffit d'utiliser ces variables :
$_SERVER['PHP_AUTH_USER'] pour le login
$_SERVER['PHP_AUTH_PW'] // pour le mot de passe
Cependant, elles ne fonctionnent qu'avec PHP 5.
Avec une version antérieure de PHP (4), seul le login est récupérable, par la variable :
$REMOTE_USER
Le fichier Robots.txt
Sur un site on essaye, dans la mesure du possible, de
faire en sorte que les pages soient indexées au mieux par les robots
(spiders) des moteurs de recherche. Mais il peut également arriver
que certaines pages soient confidentielles, ou en tout cas que l'objectif ne soit pas de les diffuser largement sur lesdits moteurs. Un site
ou une page en construction, par exemple, ne doivent pas obligatoirement
être la cible d'une telle aspiration. Il faut alors empêcher certains
spiders de les prendre en compte.
Cela se fait au moyen d'un fichier texte, appelé robots.txt, présent
sur votre serveur. Ce fichier va donner des indications au spider du
moteur sur ce qu'il peut faire et ce qu'il ne doit pas faire sur le site.
Dès que le spider d'un moteur arrive sur un site (par exemple,
http://www.monsite.com/), il va rechercher le
document présent à l'adresse http://www.monsite.com/robots.txt
avant d'effectuer la moindre "aspiration de document". Si ce fichier existe,
il le lit et suit les indications qui y sont inscrites. S'il ne le trouve
pas, il commence son travail de lecture et de sauvegarde de la page HTML
qu'il est venu visiter, considérant qu'a priori rien ne lui est interdit.
Il ne peut exister qu'un seul fichier robots.txt sur un site, et il doit se
trouver au niveau de la racine, comme le montre l'exemple d'adresse
ci-dessus. Le nom du fichier (robots.txt) doit toujours être créé en
minuscules. La structure d'un fichier robots.txt est la suivante :
- User-agent: *
- Disallow: /cgi-bin/
- Disallow: /tempo/
- Disallow: /perso/
- Disallow: /entravaux/
- Disallow: /abonnes/prix.html
Dans cet exemple :
- User-agent: * signifie que l'accès est accordé à tous les agents (tous les spiders), quels qu'ils soient.
-
Le robot n'ira pas explorer les répertoires /cgi-bin/, /tempo/, /perso/ et /entravaux/ du serveur ni le fichier /abonnes/prix.html.
Le répertoire /tempo/, par exemple, correspond à l'adresse http://www.monsite.com/tempo/.
Chaque répertoire à exclure de l'aspiration du spider doit faire l'objet d'une ligne Disallow: spécifique. La commande
Disallow: permet d'indiquer que "tout ce qui commence par"
l'expression indiquée ne doit pas être indexé.
Ainsi :
Disallow: /perso ne
permettra l'indexation ni de http://www.monsite.com/perso/index.html,
ni de http://www.monsite.com/perso.html
Disallow: /perso/
n'indexera pas http://www.monsite.com/perso/index.html,
mais ne s'appliquera pas à l'adresse http://www.monsite.com/perso.html
D'autre part, le fichier robots.txt ne doit pas contenir de lignes vierges
(blanches).
L'étoile (*) n'est acceptée que dans le champ
User-agent.
Elle ne peut servir de joker (ou d'opérateur de troncature) comme
dans l'exemple : Disallow: /entravaux/*.
Il n'existe pas de champ correspondant à la permission, de type
Allow:.
Enfin, le champ de description (User-agent,
Disallow) peut être indifféremment saisi en minuscules ou en
majuscules.
Les lignes qui commencent par un signe dièse (#), ou plus exactement tout ce
qui se trouve à droite de ce signe sur une ligne, est considéré comme étant
un commentaire.
Voici quelques commandes et très classiques importantes du fichier
robots.txt :
Disallow:/ |
Permet d'exclure toutes les pages du serveur (aucune aspiration possible). |
Disallow: |
Permet de n'exclure aucune page du serveur (aucune contrainte). Un fichier robots.txt vide ou inexistant aura une conséquence identique. |
User-Agent : fast |
Permet d'identifier un robot particulier (ici, celui des moteur Lycos et Fast/Alltheweb). |
User-agent:fast
Disallow:
User-agent: *
Disallow:/
|
Permet au spider d'Alltheweb et de Lycos (dont l'index est également fourni par Fast) de tout aspirer, mais refuse les autres robots. |
Vous avez également une autre possibilité pour interdire aux spiders
des moteurs l'accès à vos pages : la balise Meta Robots. Un
autre
article sur ce site décrit de façon très précise leur emploi.
Application au projet de site web
|