Journal : L'historique des sites webs visités pas assez protégé ?
Posté par locke () le 15 décembre 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 :
[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(...)
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(...)
> Lire le journal (15 commentaires, moyenne: 2,4).
Vous avez demandé le commentaire #784975.



Interessant
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 ?
[^]Re: Interessant
Comme indiqué un commentaire plus bas, ainsi que dans les commentaires du blog, il suffit d'utiliser XMLHttpRequest ...
[^]Re: Interessant
On peut poster un formulaire en JS, ou plus discret faire une requête AJAX pour envoyer les informations.
[^]Re: Interessant
il suffit d'effectuer une requête sur le serveur pour envoyer les stats...