C’est passé assez inaperçu, mais pendant longtemps il y avait dans IE6, IE7 et même IE8 un bug fort pratique permettant d’accéder au chemin complet d’un fichier via un <input type="file">. Je dis pratique car il permettait aux plus malins d’entre nous d’afficher une fausse preview d’une photo à côté du champs.
Code :
<form>
<input type="file" id="file-upload" onchange="document.getElementById('thumb').src=this.value;" />
<img id="thumb" src="avatar_JP.jpg" />
</form>
Si vous avez des versions non patchées de IE6, 7 ou 8, vous pouvez le tester :
Les autres browsers se donnent simplement le nom du fichier, pour des raisons pas si évidentes que ça de sécurité : Il y a 5 ans de ça j’ai même expérimenté un virus qui exploitait cet oubli de MS.
Voici un screenshot de IE7 avec un alert( this.value ); :
Et voici la même page vue sur un IE8 patché :
Le chemin complet est préfixé avec C:akepath"
Le chemin est maintenant « C:\fakepath\nom_image » … Ca sent le dévelopeur stressé qui quick fix discrètement un soft un peu trop gros pour lui :)
EDIT: Opera 10.10 fait quasi pareil ! : C:\fake_path\porsche_06032005_exif2.jpg
Pour que le code fonctionne sous les systèmes non-Windows, il faudrait préfixer le chemin vers l’aperçu par « file:// ».
En effet, le code actuel donne à l’élément d’image une source de la forme “/…”, ce que le navigateur interprète comme un chemin relatif à la racine *du site Web*.