La méthode TRACE est essentiellement utilisée à des fins de débogage. Lorsqu'on utilise cette méthode le serveur renvoie dans le corps de la réponse le contenu exact de ce qu'il a reçu du client. On se sert par exemple de cette méthode pour comprendre ce qui se passe lorsqu'on a des proxy en cascade par exemple. On voit déjà un problème: si cette information peut nous servir en phase de débogage elle peut aussi servir à une personne mal intentionnée pour obtenir des informations sur l'architecture du serveur à moindre coût.
Voici un exemple d'utilisation de TRACE:
$ telnet localhost 80 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. TRACE / HTTP/1.1 Host: foo.bar A: juste A B: B rien de plus! HTTP/1.1 200 OK Date: Thu, 06 Jul 2006 19:18:42 GMT Server: Apache/2.0.55 (Debian) mod_python/3.2.8 Python/2.3.5 PHP/5.1.4-0.1 Transfer-Encoding: chunked Content-Type: message/http 43 TRACE / HTTP/1.1 Host: foo.bar A: juste A B: B rien de plus! 0 Connection closed by foreign host.
Ca semble anodin mais je vous laisse imaginer les informations que l'on pourrait obtenir. Il semblerait que l'on s'expose à d'autres problèmes notament de faille xss mais je n'ai pas trouvé de liens pertinants.
Quoi qu'il en soit j'ai décidé de désactiver la méthode. C'est possible dans apache 2 et dans apache 1.3 (à partir de la version 1.3.34) avec la directive TraceEnable positionnée à Off.
Si on essaie de nouveau la méthode TRACE on a un accès refusé, erreur http 403