¿Por qué no puedo configurar el tamaño de fuente del enlace visitado?

Hola Habr! Le presento la traducción del artículo "¿Por qué no puedo configurar el tamaño de fuente de un enlace visitado?" por Jim Fisher.



Los enlaces visitados se muestran en púrpura; no visitado - en azul. Esta diferencia nos ha llegado desde el advenimiento de la web. Pero CSS nos permite reconfigurar estas propiedades con el pseudo-selector: visitado! Supongamos que desea que los enlaces visitados sean grises y reducir su tamaño para mostrarle al usuario que este enlace ya ha sido visitado.

a:visited { color: gray; font-size: 6px; } 

Este estilo se aplica a la página actual:


Colorear el enlace en gris, como se esperaba, nos notifica que ya se ha visitado, ¡pero el tamaño de fuente sigue siendo el mismo! Esto sucede porque cambiar el tamaño de fuente puede ser la causa de la vulnerabilidad. Si CSS puede cambiar el tamaño de fuente, yo (Jim) puedo decir si visitó pornhub.com. Pero como?

Las páginas web están disponibles para inspeccionar los elementos mostrados en la página. La forma más obvia es usar window.getComputedStyle (). Habla sobre las propiedades aplicadas al enlace visitado mencionado anteriormente; según lo informado por el navegador: tamaño de fuente: 18px; color: rgb (0, 0, 238).

Si getComputedStyle informa un cambio en el tamaño de la fuente de 18px a 6px para los enlaces visitados, yo (Jim) entenderé que la página ha creado un enlace a pornhub.com, luego comprobaré el tamaño de la fuente para determinar el historial de navegación de su navegador. Puedo usar estos datos para publicidad dirigida, puedo vender sus datos o chantajearlo, y así sucesivamente ... El agujero de seguridad se cerró al prohibir el cambio de tamaño de fuente para: visitado.

Pero la información obtenida usando getComputedStyle sobre el color del enlace visitado será: rgb (0, 0, 238), es decir, azul. Esto es una mentira: ¡el enlace es gris! Para la propiedad de color, los navegadores cierran el agujero en la vulnerabilidad de otra manera: en lugar de prohibir los cambios, obligan a getComputedStyle a mentir sobre el valor real.

¿Por qué se usan dos enfoques? ¿Por qué no podemos hacer que getComputedStyle mienta sobre el parámetro de tamaño de fuente también? La razón es que puede examinar los elementos mostrados de la página web y otros métodos además de getComputedStyle. También puede verificar la posición de un elemento en una página usando .pageXOffset o .pageYOffset. Cambiar el tamaño de fuente del enlace visitado afectará el desplazamiento de otros elementos, por lo que puede verificar indirectamente qué enlaces fueron visitados. Deshabilitar el tamaño de fuente para un: visitado es una solución difícil pero confiable.

Este enlace proporciona una breve lista de propiedades permitidas, como el color, que no deberían afectar el diseño de la página y no se pueden detectar. Todos ellos son diferentes formas de cambio de color. Todas las demás propiedades CSS están bloqueadas.

En teoría, no hay forma de determinar si el color del enlace visitado ha cambiado. La única posibilidad es un ataque temporal: por ejemplo, si el cambio de color a rosa tomó más tiempo que el azul, la página puede medir cuánto tiempo tardó en mostrar el elemento y compararlo con la duración esperada.

PD:
Un agradecimiento especial por la ayuda para ajustar la traducción a Olga Pereverzeva .

Gracias a Oleg Yatsenko ( Samber ), en los comentarios llamó la atención sobre el hecho de que la solución al problema con tal fuga de datos se implementó por primera vez en Mozilla : el autor de la solución es David Baron .

Source: https://habr.com/ru/post/445052/


All Articles