Récemment je suis tombé sur cette étude pdf (il y avait déjà un article sur Habré pour elle), après l'avoir lue, j'ai décidé de chercher des façons plus intéressantes d'utiliser F-Cache. Objectivement, aucune personne saine d'esprit ne mettra un schéma avec des redirections sur son site Web. C'est une fuite, mais une fuite d'intérêt plus théorique que pratique (IMHO).
Décrit un objectif (pour trouver un moyen de tester F-Cache via javascript) et a commencé à chercher. Au cours des expériences, j'ai identifié plusieurs façons de le faire, mais je décrirai la plus intéressante, à mon avis.
Je vous préviens à l'avance - ce n'est pas une solution multi-navigateurs. Pour le moment, je ne l'ai testé que sur le chrome de bureau.
Le test préliminaire peut être effectué ici: https://favicon-leak.site/
Comment ça fonctionne
Chromium dispose de deux types de caches de ressources: disque et mémoire. Comme beaucoup l'ont deviné, le cache disque est un stockage permanent de ressources, mais avec son propre délai de lecture (1+ ms). À son tour, le cache mémoire est utilisé pour le stockage temporaire des ressources fréquemment utilisées, et les lectures, en moyenne, sont instantanées (0 ms). Ainsi, en plaçant une ressource dans le cache mémoire, le navigateur réduit le nombre de lectures depuis le disque et augmente la vitesse de rechargement des ressources elles-mêmes.
Lorsque nous chargeons une image pour la première fois via <img>, elle sera soit chargée via src, soit extraite du cache disque. Dans les deux cas, cette image est le plus souvent placée dans le cache mémoire. Considérez ce code javascript:
var img = new Image();
img.src = some_image_url;
if (img.complete && img.height + img.width > 0) {
// TRUE, memory cache
}
C'est ce code qui permet de vérifier la présence d'une image dans le cache mémoire. À partir de là, nous pouvons tirer la conclusion suivante: si vous chargez <img> au moins deux fois, la deuxième fois, l'image doit être chargée à partir du cache mémoire.
Le comportement de la balise <link rel = "icon"> est différent de <img> et le rechargement d'une image la lit toujours à partir du disque:
La découverte clé était ce comportement du navigateur:
, <link>, disk cache <img> ( memory). , F-Cache. ! <link> F-Cache, , memory cache, . , , F-Cache . ,
<img> + <img> + <link> + <img> <— , , F-Cache .. memory cache. , F-Cache.
, 100%- , .. <link>(, ), setTimeout. timeout, , <link> .
F-Cache
F-Cache , , . F-Cache cache policy -. F-Cache read-only .
https://favicon-leak.site/
En utilisant le chrome automatisé, j'ai dressé une petite liste de liens favicon pour les sites populaires. https://favicon-leak.site/ vérifie les icônes de cette liste. Peut-être qu'au moment où vous lirez cet article, certains liens seront obsolètes et renverront un faux résultat négatif.