Journal L'historique des sites webs visités pas assez protégé ?

Posté par  .
Étiquettes : aucune
0
15
déc.
2006
En lisant un article sur "les prédictions de 2007 en matière de sécurité" [1], mon attention a été attirée par un autre article démontrant les possibilités d'utiliser le DOM javascript pour vérifier si des sites avaient été consultés par un internaute [2] .

Au départ j'ai pensé à une faille dans l'objet window.history mais non ; la technique consiste simplement à comparer la couleur de deux liens : celle d'un lien visité avec celle d'un autre, pas encore visité.

Cette possibilité est offerte par beaucoup de navigateurs internets, finalement presque tous ceux qui implémentent CSS et le DOM. J'ai modifié un poil le code présenté dans le deuxième article pour pouvoir le tester sur d'autres navigateurs :

var uri = prompt("Check uri has been visited?", "http://uri");

var link = document.createElement("a");
link.href = uri+Math.random();
link.innerHTML = uri;
link.id="link";
document.body.appendChild(link);

var link2 = document.createElement("a");
link2.href = uri;
link2.innerHTML = uri;
link2.id="link2";
document.body.appendChild(link2);

var getCssStyleValue = function (domElement, cssStyleProp) {
return domElement.currentStyle ? domElement.currentStyle[cssStyleProp] : window.getComputedStyle(domElement,null).getPropertyValue(cssStyleProp);
}

var colorNotVisited = getCssStyleValue (link, "color");
var colorVisited = getCssStyleValue (link2, "color");

link.innerHTML = link2.innerHTML ="";

document.body.removeChild(link); document.body.removeChild(link2);

var visited = colorNotVisited!=colorVisited;

alert (uri+" has"+ (visited ?" ":" NOT ") + "been visited."+
"\n(\"" + colorNotVisited + (visited ?"!=":"==") + colorVisited + "\")");


[1] Application Security Predictions of 2007 : http://www.cgisecurity.com/2006/12/07
[2] I know where you've been : http://jeremiahgrossman.blogspot.com/2006/08/i-know-where-yo(...)
  • # Interessant

    Posté par  (site web personnel) . Évalué à 2.

    C'est interessant, mais je ne vois pas comment le serveur peut connaitre cette info etant donné que le JS tourne au niveau du client. Quelqu'un a t il une explication ?
  • # intéressante

    Posté par  (site web personnel) . Évalué à 4.

    Vraiment intéressante cette idée, effectivement je n'y avais jamais pensé.
    Alliée à de l'ajax pour renvoyer l'information au serveur, on peut fliquer de manière puissante! :S
  • # Une géolocalisation de l'internaute à pas cher

    Posté par  . Évalué à 2.

    Tout d'abord désolé pour les fautes de grammaires dans le journal. /o\

    On peut utiliser cette technique pour s'offrir une géolocalisation de l'internaute à moindre coût en full javascript :

    Il suffit de tester successivement l'historique de l'internaute vers des sites google, en considérant que la redirection systématique de google vers un site national est une donnée fiable à exploiter.

    Par exemple si on détecte que l'internaute a visité www.google.be : bim on sait qu'il est localisé en belgique (A l'heure où j'écrivais ce commentaire la Belgique était encore un pays de l'Europe de l'Ouest), www.google.ru : boum on sait qu'il est en russie, etc...

    Dans certains cas ça fait la rue Michel : la fiabilité des résultats peut être comparée à celles de bases d'IP plus ou moins honéreuses pour les données des pays.

    On peut imaginer moultes applications marketing à ce petit hack javascript. C'est pas michto ?
    • [^] # Re: Une géolocalisation de l'internaute à pas cher

      Posté par  . Évalué à 5.

      Ben si tu veux savoir ou est localise l'internaute, tu regardes son IP, c'est plus simple.
      • [^] # Re: Une géolocalisation de l'internaute à pas cher

        Posté par  . Évalué à 1.

        Oui, ça se discute, faire quelquechose comme ça :

        var nationalSite = [".us", ".zh", ".fr", ".co.uk"]; // etc ...
        var i=0;
        while (i < country.length){
        // le client a t-il été sur ("google"+nationalSite[i] ?
        i++;
        }

        me semble être une alternative pertinente dans certains cas, utilisée en concurrence avec des outils comme geoip. Tu voyais peut-être d'autres façons de connaître le pays d'un internaute?
      • [^] # Re: Une géolocalisation de l'internaute à pas cher

        Posté par  . Évalué à 2.

        Le problème c'est que tous les PTR sur les adresses IP n'ont pas forcément un TLD nationnal.

        Exemple:
        ...fbx.proxad.net. => Bon, là tu sais que c'est free, donc en france, mais si tu veux te baser là dessus il faut connaître tous les FAI.

        ACD2B974.ipt.aol.com. => Là c'est AOL et ça peut venir de n'importe quel pays...
    • [^] # Re: Une géolocalisation de l'internaute à pas cher

      Posté par  . Évalué à 2.

      ca me semble bien compliqué cette technique...
      plutôt que deviner quel google a été utilisé, il ne serait pas plus simple de partir du même concept qui est utilisé dans google pour faire sa redirection ?

      tout simplement en analysant dans le header...
      et en particulier la chaine "Accept-Language"...
      • [^] # Re: Une géolocalisation de l'internaute à pas cher

        Posté par  . Évalué à 1.

        Je ne suis pas sur que google n'utilise que le header "Accept-Language" pour rediriger ses internautes, notamment parce qu'il leur propose du contenu "localisé".
        • [^] # Re: Une géolocalisation de l'internaute à pas cher

          Posté par  . Évalué à 1.

          Pour préciser ce point, si je demande une page de google sans envoyer de header 'ACCEPT-LANGUAGE' :

          $lwp-request -dS www.google.com/ HTTP/1.1
          GET http://www.google.com/ --> 302 Found
          GET http://www.google.fr/ --> 200 OK
          GET http://www.HTTP.com/1.1 --> 200 OK

          Google me renvoie bien vers du contenu de son site .fr
        • [^] # Re: Une géolocalisation de l'internaute à pas cher

          Posté par  . Évalué à 2.

          oui... enfin, à la base ton "delire" ne te permets pas d'avoir mieux que le pays en terme de précision. un accept-language est donc suffisant.

          ensuite, en effet, google utilise sans doute d'autres techniques qui lui permet d'être plus précis...

          je parle de "delire" parce que c'est quand même un peu extravaguant (et je ne parle pas du javascript que tu as pondu...) alors qu'il existe une solution "qui est faite justement pour celà"... par contre utiliser cette technique pour fliquer/voir si l'utilisateur est allé sur tel ou tel site, oui, c'est coherant, puisqu'il n'y a pas d'autre ssystèmes a priori...
  • # NoScript

    Posté par  (site web personnel) . Évalué à 2.

    Raison de plus pour utiliser NoScript et n'autoriser l'exécution du JavaScript que pour quelques domaines de confiance.
    • [^] # Re: NoScript

      Posté par  . Évalué à 1.

      Je trouve que ce serait une bonne chose pour la protection de l'internaute que les moteurs javascripts renvoient la valeur null pour des getPropertyValue sur des couleurs de liens n'appartenant pas à l'uri en cours.
      Cela démontrerait que le concepteur du navigateur apporte de l'importance à la confidentialité du surf de l'utilisateur.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.