Новая утечка истории браузера через favicon
Недавно наткнулся на это исследование pdf (по его мотивам уже была статья на хабре), после прочтения, решил поискать более интересные способы использования F-Cache. Объективно, схему с редиректами никто в здравом уме не будет ставить на свой сайт. Это утечка, но утечка представляющая больше теоретический интерес, чем практический (имхо).
Обозначил цель (найти способ проверить F-Cache через javascript) и начал поиски. В ходе экспериментов выделил несколько способов это сделать, но опишу самый интересный, на мой взгляд.
Заранее предупреждаю — это не кроссбраузерное решение. На данный момент, проверял только на десктопных хромах.
Предварительный тест можно пройти здесь: https://favicon-leak.site/
Как это работает
У хрома есть два типа ресурсного кеша: disk и memory. Как многие догадались, disk cache это перманентное хранилище ресурсов, но со своей задержкой на чтение (1+ ms). В свою очередь, memory cache используется для временного хранения часто используемых ресурсов, а чтение, в среднем, мгновенное (0 ms). Таким образом, помещая ресурс в memory cache браузер уменьшает количество чтений с диска и увеличивает скорость повторной загрузки самих ресурсов.
Когда мы первый раз загружаем картинку через , то ее либо загрузит по src, либо достанет из disk cache. В обоих случаях эта картинка, чаще всего, помещается в memory cache. Рассмотрим такой javascript код:
var img = new Image();
img.src = some_image_url;
if (img.complete && img.height + img.width > 0) {
// Это условие TRUE, только когда картинка успешно была прочитана из memory cache
}
Именно этот код позволяет проверить наличие картинки в memory cache. Из этого можно сделать такой вывод: если загрузить минимум два раза, то во второй раз картинка должна загружаться уже из memory cache.
отличается от и повторная загрузка одной картинки всегда читает ее с диска: © Habrahabr.ru