Fiche : Protection de votre site

Objet de la fiche :

État de la fiche En cours


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.

htaccess comment ça marche?

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 :

Erreur 401

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


Cryptez vos mots de passe





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.
Autres sources d'information sur le fichier Robots.txt :
Un autre article sur la syntaxe de ce fichier : http://www.searchtools.com/robots/robots-txt.html
Un vérificateur de syntaxe pour votre fichier robots.txt :
http://www.searchengineworld.com/cgi-bin/robotcheck.cgi

Application au projet de site web

 


Respectons la propriété intellectuelle