Outils pour utilisateurs

Outils du site


astuces_sites_web

Astuces pour serveur web

Mettre vos propres pages d'erreur

Il faut d'abord que la configuration d'apache permette les instructions qui, placées dans “.htaccess”, vont outrepasser les instructions des fichiers de configuration.

Pour cela, éditez (sous root) le fichier /etc/apache2/default-server.conf. Dans le bloc commençant par <Directory “/srv/www/htdocs”>, il faut qu'il y ait au minimum:

AllowOverride FileInfo  

Il pourrait y avoir aussi “AllowOverride All” mais il faut faire le minimum d'ouverture pour limiter les problèmes de sécurité.

Attention, si vous avez modifié ce fichier, il faut demander à apache de le prendre en compte (on suppose ici qu'apache est déjà en exécution):

# /usr/sbin/rcapache2 reload  

Ensuite, à la racine de votre site, placer un fichier “.htaccess” contenant (c'est un exemple: il y a beaucoup d'autres codes d'erreur):

ErrorDocument 400 /pagesderreurs/400.html
ErrorDocument 401 /pagesderreurs/401.html
ErrorDocument 403 /pagesderreurs/403.html
ErrorDocument 404 /pagesderreurs/404.html
ErrorDocument 500 /pagesderreurs/500.html  

Ces fichiers se trouveront ici (c'est un exemple) dans le répertoire “/pagesderreurs”, compté à partir de la racine du site, que ce soit:

  • le site principal (/srv/www/htdocs),
  • un site perso (/home/user/public_html),
  • ou un de leurs sous-domaines (hôte virtuel),

et seront valables pour tous les sous-répertoires du site.

Si vous avez déjà un fichier “.htaccess” avec d'autres instructions, il suffit d'y ajouter les lignes précédentes.

Vous créez ensuite les 5 pages d'erreur personnalisées 400.html, etc… Elles doivent faire plus que 512 octets, sinon, internet explorer de windows n'en tiendra pas compte.

Pour les messages d'erreur en français:

erreur 400: mauvaise requête
erreur 401: non autorisé
erreur 403: interdit
erreur 404: page non trouvée
erreur 500: erreur interne du serveur  

Exemple de code source pour la page 404.html:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//FR" "http://www.w3.org/TR/html4/transitional.dtd">
<html>
<head>
<title>Page d'erreur 404</title>
<meta name="description" content="Page d'erreur 404" />
<meta name="author" lang="fr" content="Tyrtamos" />
<meta name="language" content="French" />
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-15" />
</head>
<body>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><font size="6"><i><b>&nbsp;Bienvenue sur le linux.jpvweb.com!</b></i></font><b></b></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><font size="5" color="blue"><span style="background-color:yellow;">&nbsp;D&eacute;sol&eacute; (erreur 404): page non trouv&eacute;e !!</span></font></p>  
</body>
</html>  

Et c'est tout: désormais, les appels erronés afficheront votre propres pages d'erreurs!

Permettre l'affichage du contenu des répertoires

Pour l'ensemble du site

Dans les dernières versions d'apache, il est interdit par défaut que le contenu d'un répertoire soit affiché, en l'absence de fichier index. Il suffit donc de le permettre à nouveau.

Pour cela, éditez (sous root) le fichier /etc/apache2/default-server.conf. Dans le bloc commençant par <Directory “/srv/www/htdocs”>, il faut qu'il y ait:

Options Indexes  

Si vous avez modifié ce fichier, il faut demander à apache de prendre en compte le nouveau fichier (on suppose ici qu'apache est déjà en exécution):

/usr/sbin/rcapache2 reload  

Voilà, désormais, un appel d'une page de votre site dans un répertoire sans fichier index listera les sous-répertoires et fichier, comme dans un client ftp.

Pour certains répertoires du site

Utilisation courante: dans un site, avoir un sous-répertoire avec des fichiers téléchargeables (des photos par exemple).

Il faut laisser l'interdiction générale de lister le contenu des répertoires sans fichier index, mais le permettre pour certains répertoires grâce à des fichiers “.htaccess” placés dans ces répertoires. Pour que les instructions placées dans les “.htaccess” soient reconnues, il faut que la config d'apache le permette.

Pour cela, éditez (sous root) le fichier /etc/apache2/default-server.conf. Dans le bloc commençant par <Directory “/srv/www/htdocs”>, il faut qu'il y ait:

AllowOverride Options  

Il pourrait y avoir aussi “AllowOverride All” mais il faut faire le minimum d'ouverture pour limiter les problèmes de sécurité.

Si vous avez modifié ce fichier, il faut demander à apache de prendre en compte le nouveau fichier (on suppose ici qu'apache est déjà en exécution):

# /usr/sbin/rcapache2 reload  

Placez-vous ensuite dans le répertoire concerné, et créez un fichier “.htaccess” contenant simplement:

Options +Indexes  

C'est fait: désormais, l'appel à ce répertoire, dans la mesure où il ne contient pas de fichier index, affichera le contenu de ce répertoire.

Cette option reste valable pour tous les sous-répertoires de ce répertoire, sauf s'il y a une nouvelle interdiction par un fichier “.htaccess” contenant:

Options -Indexes  

Avoir une zône d'accès réservé

Protection par un nom caché de fichier ou de répertoire

Vous avez un site perso ouvert au public, et vous voulez mettre à disposition de certaines personnes seulement une page ou plusieurs pages (des photos par exemple).

C'est très simple: vous créez une page html ou un répertoire qui:

  • n'est cité dans aucune des pages de votre site,
  • et qui se trouve dans un répertoire dans lequel le listage de ce répertoire est interdit (pour que le nom ne soit pas affichable).

Vous transmettez le nom de la page html ou du répertoire par mail aux personnes concernées.

Si vous voulez permettre le listage du contenu du répertoire (pour permettre le téléchargement de photos par exemple), utilisez un fichier “.htaccess” (voir plus haut).

Ne choisissez pas un nom trop simple, parce qu'en fait, ce nom caché de votre site fait office de mot de passe.

Bon, soyons clair: ce n'est pas une méthode homologuée dans le “secret défense”… Mais c'est très simple et ça marche très bien!

Protection d'un fichier ou d'un répertoire par questionnement du client web

Vous avez un site perso ouvert au public, mais vous voulez réserver une page à un groupe restreint (les animateurs d'une association par exemple), à qui vous avez donné un mot de passe unique pour le groupe restreint.

Vous créez une page html avec le nom que vous voulez et c'est ce nom qui servira de mot de passe. Ce nom de page ne doit être cité dans aucune des pages du site. Admettons pour l'exemple: “elefan.html”. Ce genre de nom est intéressant, parce qu'il est facile à retenir mais qu'il n'est pas dans le dictionnaire à cause de la faute d'orthographe (si, si, elle était volontaire!).

Vous créez un script javascript placé dans un fichier (scriptutils.js par exemple) contenant:

function accesProtege() {
  var ch=prompt("Mot de passe :","");
  if (ch==null) ch="";
  if (ch.length > 0) parent.location = ch+".html";
  }  

Vous placez dans le head de votre page html de quoi charger ce script:

<script language="JavaScript" src="scriptutils.js"></script>  

Et, dans le lien hypertexte chargé d'accéder à cette page réservée, vous placez, par exemple:

<a href="javascript:parent.accesProtege()">Réservé animateurs</a>  

Quand quelqu'un cliquera sur le lien hypertexte, il apparaitra une petite fenêtre lui demandant le mot de passe. Il faudra qu'il donne le nom du fichier caché: “elefan” dans notre exemple. Et le script appellera la page “elefan.html”. Si le nom n'est pas bon, il ne se passera rien.

Voilà, c'est tout: ce n'est pas “secret défense”, mais c'est très simple, et ça marche très bien!

Protection d'un répertoire par .htaccess

Il faut d'abord qu'apache soit configuré pour accepter des instructions d'autorisation par des fichiers .htaccess. Pour cela, éditez (sous root) le fichier /etc/apache2/default-server.conf. Dans le bloc commençant par <Directory “/srv/www/htdocs”>, il faut qu'il y ait “AuthConfig” dans les paramètres de la ligne commençant par “AllowOverride”:

AllowOverride AuthConfig  

Il pourrait y avoir aussi “AllowOverride All” mais il faut faire le minimum d'ouverture pour limiter les problèmes de sécurité.

Attention, si vous avez modifié ce fichier, il faut demander à apache de le prendre en compte (on suppose ici qu'apache est déjà en exécution):

# /usr/sbin/rcapache2 reload  

Ceci étant fait, dans le répertoire à protéger, placez un fichier “.htaccess” (il y a bien un point avant le “h”) contenant, par exemple:

AuthType Basic
AuthName "autorisation requise"
AuthUserFile /chemin/.htusers
AuthGroupFile /chemin/.htgroups
require valid-user  

C'est AuthName qui déclenchera la petite fenêtre qui demandera le login d'autorisation . Le texte accompagnant “AuthName” ne peut pas être vide, et il est déconseillé qu'il y ait des caractères non ASCII (voyelles accentuées, ç, ….).

A noter que les fichiers .htusers et .htgroups sont donnés avec leurs adresses absolues par rapport à la racine du linux (/chemin), et non à la racine du site! Heureusement d'ailleurs, parce que ça permettra de les placer en dehors du site pour des raisons de sécurité.

Le fichier .htusers contiendra la liste des utilisateurs accompagnés de leur mot de passe crypté.

Pour créer un tel fichier avec un 1er utilisateur = user1, faire en console sous root dans le répertoire qui doit contenir le fichier (/chemin):

# htpasswd2 -c .htusers user1  

Cette commande demande le mot de passe (2 fois) et crée le fichier .htusers avec une première ligne comme (par exemple): user1:72cpwdsHeS2I.

Pour ajouter l'utilisateur “user2” au fichier .htusers existant, faire:

# htpasswd2 .htusers user2  

Etc. Par exemple, avec 5 utilisateurs, le fichier .htusers ressemblera à cela:

user1:72cpwdsHeS2I.
user2:sR/5K2BQlBA8M
user3:HptrAQt94bK9g
user4:n1RiNyX5IyiBA
user5:D3GLyVVaVASnY  

Si on veut utiliser des groupes, on aura un fichier .htgroups contenant, par exemple:

group1:user1 user4
group2:user2 user3 user5
group3:user2 user5  

Avec ces 2 fichiers, .htusers (indispensable) et .htgroups (si on utilise des groupes), on peut avoir les directives “require” suivantes:

Pour n'avoir qu'un ou plusieurs utilisateur(s) autorisé(s):

require user user3 user4  

Pour avoir tous les utilisateurs du fichier .htusers autorisés:

require valid-user  

Pour avoir un ou plusieurs groupe(s) autorisé(s):

require group group2 group3  

Vous pouver aussi mettre plusieurs lignes “require”, par exemple:

require user user1 user4
require group group2  

Et vous pouvez même limiter l'action de require à un fichier (ex: toto.html) ou à certains types de fichiers (ici à tous les *.html du répertoire et de ses sous-répertoires):

<Files *.html>
require user  user1 user4
require group group2
</Files>

Sur le plan sécurité, apache est configuré par défaut (dans le fichier /etc/apache2/httpd.conf) pour refuser d'afficher et de télécharger les fichiers commençant par “.ht” (donc .htaccess, .htusers et .htgroups) même quand on les appelle directement. C'est aussi le cas pour les serveurs ftp sécurisés: par exemple, vsftp a le paramètre “force_dot_files” mis à “no” par défaut, et donc refuse d'afficher les fichiers commençant par un point). On peut donc mettre .htusers et .htgroups dans le répertoire à protéger. Il est cependant conseillé de placer ces 2 fichiers en dehors du site (/srv/autorisation par exemple) à condition que ce soit possible (avec un hébergement extérieur mutualisé, ça ne l'est pas toujours).

Il reste que le mot de passe proposé par le demandeur, passera en clair sur le web. Si on ne l'accepte pas, il faudra passer par un cryptage SSL.

Mise à jour automatique de la date de mise à jour de la page

Vous venez de mettre à jour une des pages de votre site. En général, il y a une “date de mise à jour” de la page, et il ne faut pas oublier de la mettre à jour aussi.

Je vous propose une méthode automatique: il s'agit tout simplement d'afficher la date du fichier!

Mettre un script javascript dans un fichier (par exemple scriptutils.js), comme suit:

function dateModif() {
  var chd = new Date(document.lastModified);
  return ((chd.getDate())+"/"+(chd.getMonth()+1)+"/"+chd.getFullYear());  
  }

Il faut ensuite intégrer dans le head de la page de quoi charger ce script:

<script language="JavaScript" src="scriptutils.js"></script>  

Et vous placez dans la page, là où vous voulez écrire la date:

<script language="JavaScript">  
<!--
document.write(dateModif());
//-->
</script>  

Désormais, c'est la date du fichier du site qui apparaitra!

Protéger les adresses mail de votre site, des spammeurs

Quand j'ai fait mon 1er site en 2001, j'étais tout content de mettre mon adresse email en clair sur les pages. Et je reçois depuis environ 30 spams par jour, dont certains comportent des virus. J'ai même reçu des virus avec mon adresse mail comme émetteur (=usurpation d'adresse), accompagnés d'un message de mon FAI me suggérant d'avertir l'émetteur de l'envoi de son virus…

Depuis, je suis devenu prudent, et j'ai une méthode pour (essayer d') échapper aux robots des spammeurs. J'utilise la fonction javascript suivante:

function ecrisMoi(qui, ou, sujet) {
  window.open("mailto:"+qui+"@"+ou+"?subject="+sujet,"mail","menubar=NO,SCROLLBAR=NO,titlebar=NO,toolbar=NO");  
  }  

Vous la placez dans un fichier script (scriptutils.js par exemple). Vous placez dans le head de la page:

<script language="JavaScript" src="scriptutils.js"></script>  

Et à l'endroit où on doit lancer l'appel à l'édition d'un nouveau mail (par exemple):

<a href="javascript:ecrisMoi('tyrtamos','jpvweb.com','[du site web] à l\'attention de Tyrtamos')">Ecrire à Tyrtamos</a>  

Et si voulez tout de même afficher votre adresse mail en clair sur la page, mettez-là dans une image (voir la page contact du site)! Que vous pouvez éventuellement rendre cliquable (hyperlien) pour déclencher la fonction précédente.

Bon, il faut reconnaitre qu'on est encore dans la vieille lutte éternelle du glaive et du bouclier: les robots des spammeurs, devenant de plus en plus intelligents, finiront par trouver ce genre d'astuce (si ce n'est pas déjà fait…) et il faudra en trouver d'autres!

astuces_sites_web.txt · Dernière modification: 2007/12/15 09:41 par tyrtamos

Outils de la page