![]() Geek, nouvelles technologies, société et jeux vidéos! | |||||
Suite à mon article sur le soi-disant danger des cookies sur le net, j'avais juste signalé qu'une image pouvait être aussi dangereuse. Je vais donc vous montrer ci-dessous qu'une simple image peut révéler pas mal d'informations sur votre ordinateur et surtout que l'on peut cacher du code derrière l'appel d'une image ! Simple image : IP et User-AgentNous allons commencer simplement : l'appel d'une image statique. <img src='monimage.jpg' alt='Mon image !' />
Ce qui donne : ![]() Rien de bien sorcier, mais quand l'image s'est affichée, voilà ce qui est apparu dans les logs de mon serveur : MonAdresseIp - - [14/Dec/2014:21:48:28 +0100] "GET /monimage.jpg HTTP/1.1" 200 216023
Si vous avez Fiddler d'installé vous pouvez aussi voir ce que cette image transporte : Rien qu'en affichant une image j'ai donc :
C'est bien pour commencer, d'ailleurs c'est comme ça que l'on génère des statistiques de visites sur les sites web. Se faire passer pour une imageOn va utiliser la librairie GD de PHP pour faire des manipulations sur les images, donc on va utiliser l'appel : <img src='monscript1.php' alt='Mon image !' />
et le contenu de monscript1.php : <php
// Je fais croire au navigateur que je suis
// une image qui peut changer
header("Content-Type: image/jpg");
header("Cache-control: no-store,must-revalidate,no-cache");
// Je charge et fais passer l'image dans le code
$img = imagecreatefromjpeg("monimage.jpg");
imagejpeg($img);
// libération de la ressource
imagedestroy($img);
exit;
?>
Ce qui donne : ![]() A vous de mettre dans le code une façon plus subtile de récupérer l'IP ou l'User-agent, le temps de navigation,... Par contre, l'appel d'un script dans une balise img affiche une image ? Whaou ! Cependant il y a un petit souci : l'appel à un script n'est pas très discret... On va donc utiliser le mécanisme d'URL Rewriting d'Apache : RewriteEngine On
RewriteRule ^monscript\.jpg$ %{SCRIPT_URL}script/monscript.php [L]
Ainsi on peut utiliser la syntaxe suivante sans problème : <img src='monscript1.jpg' alt='Mon image !' />
Ça ne vous suffit pas ? Regardez plutôt : ![]() Facile, rajouter dans le code précédent : $text_color = imagecolorallocate($img, 233, 14, 91);
imagestring($img, 5, 5, 5, 'Il est '.date("r"), $text_color);
C'est comme ça qu'il est possible de faire passer une information dynamique dans un contenu statique, un flux RSS par exemple ! A vous de faire des appels à une base ou à un fichier... Passer un paramètre dans une imagePrenons un cas simple : vous avez une base de données de mails et vous souhaiteriez savoir quel mail est valide. Il suffit d'envoyer une image qui fera une interrogation serveur et qui passera le Hash MD5 du mail pour prouver que l'adresse en question a bien affiché l'image. Nous allons encore utiliser la réécriture d'URL à la volée et quelques expressions régulières : RewriteRule ^monimage-([1-9]+)\.jpg$ %{SCRIPT_URL}monimage.php?param=$1 [L]
Récuperer le paramètre dans le code PHP : $var = $_GET["param"];
Et voilà le résultat : <img src='monimage-1234.jpg' alt='Mon image paramétrée!' />
![]() Vous pouvez modifier le numéro près du nom de l'image ci-dessus en l'ouvrant dans un nouvel onglet pour constater la prise en compte du paramètre. Vous comprenez maintenant pourquoi les clients de messagerie cachent les images. Prochainement : attention ce site utilise des images !Nous avons vu comment cacher un comportement derrière une image que ce soit juste à son appel ou en mettant du code paramétré derrière. Là où les cookies représentent juste une paire clef/valeur, nous avons grâce aux images un comportement plus sournois car caché côté serveur. Et pendant la rédaction de cet article j'ai même appris que l'on pouvait y cacher du code Javascript ! + Sources des images Vous pouvez aussi lire :
![]() Rédacteur et programmeur principal du Goufablog. Ingénieur de profession et avide de connaissances technologiques et scientifiques il partage son savoir à travers ces différents articles. Plus de renseignements sur la page de contact. ![]()
|
![]() |
||||
|
Par contre, ne soyez pas crédules, de nombreuses infolettres contiennent ce genre d'images afin de voir si vous avez ouvert le mail (par exemple) et un système de lien + redirection pour savoir si vous avez cliqué sur un lien.
Votre avis?