Apache logoEn compilant Apache 2.x (ou antérieur) avec l'option --enable-mods-shared=most, l'on installe d'un coup une vingtaine de modules quasiment indispensables à toute installation de test ou de production, tels que les mod_negotiation, mod_mime, mod_rewrite ou l'immortel mod_dir.

J'ai cependant été attiré par un module qui faisait "tilt" à chaque fois, mais dont je n'ai jamais eu le temps de jeter un coup d'oeil : le mod_speling.

Ce module désactivé par défaut (ajouter CheckSpelling on à .htaccess) se propose donc de résoudre magiquement les soucis d'écriture d'url, voyons son fonctionnement extérieur depuis telnet (en considérant que j'ai une vraie page /phpinfo.php) [1]:

GET /phpinfo.ph HTTP/1.0

HTTP/1.1 301 Moved Permanently
...
Location: http://localhost/phpinfo.php

et ceci pour /phinfo.php, /phpinf0.php, etc... L'erreur 301 est transparente pour l'internaute, il est directement redirigé. Ensuite nous avons :

GET /phpinfo.p555hp HTTP/1.0

HTTP/1.1 300 Multiple Choices

...sans oublier un magnifique 404 pour /phpindafo.phpda.

Bien.

C'est pas pour casser l'ambiance, mais je vois déjà trois soucis majeurs ici :

  1. Il suffit de consulter ses stats pour voir la masse d'erreurs 404 que l'on a habituellement à gérer, entre les requêtes des navigateurs à la recherche de /favicon.ico, de liens périmés ou autre. Il faudrait donc appliquer un test d'existence de fichier en testant chaque caractère, petit à petit. Et non, les réponses du genre ouais mais j'ai un sextuple-xeon qui a faim, tu chipottes là ! ne tiennent pas la route ; l'admin/développeur est payé pour chipotter (ce qui explique d'ailleurs pourquoi il n'est pas activé chez les hébergeurs mutualisés).
  2. Cela invite à mal faire, et créera surement à grande échelle des phénomènes tels qu'il nous faudrait (encore) 10 ans pour en défaire les internautes
  3. Vous la voyez l'erreur 300 Multiple Choices ? Eh bien imaginez que vous avez malencontreusement oublié de vraiment protéger un répertoire sensible, en y ajoutant juste un fichier d'index pour empêcher le listing, eh bien vous voyez clairement à quoi vous vous exposez...

Même sans une heure de recul, je ne vois pas une seule bonne excuse d'utiliser ce module, je vous conseille donc de ne pas l'installer/activer.

Notes

[1] Note: les requêtes sont envoyées en utilisant la version 1.0 du protocole HTTP, car HTTP/1.1 nécessite l'envoi de l'hostname.