Antes de 2010, navegadores permitiam que sites medisse detalhes de links visitados via CSS, como :visited. Um atacante podia usar JavaScript para inferir dados sensíveis, mas isso só fazia sentido em contextos específicos, como um iframe cross-origin ou via XSS. Dentro de um iframe, o atacante não lê diretamente o conteúdo de outro site, mas podia medir diferenças de renderização que variavam dependendo de dados internos. Por exemplo:

let iframe = document.querySelector("iframe");
let inicio = performance.now(); // Inicia a medição de tempo.
let altura = iframe.contentWindow.document.querySelector("a.visited").offsetHeight; // Solicita uma propriedade de layout que exige um cálculo (reflow). O tempo que essa linha leva é a informação vazada.
let fim = performance.now(); // Finaliza a medição de tempo.

console.log(fim - inicio); // Exibe a diferença de tempo.


Aqui você não lê o HTML do link. O que vaza é a discrepância no tempo de execução da operação, que varia com o cálculo do layout."
 
 
Back to Top