Cambios de seguridad en Firefox 4 por el exploit :visited

Cuando uno recien termina de formatear la computadora, una de las tareas más divertidas es bajar megas y megas de programas para reinstalar. Y mientras esos programas están bajando lo mejor que uno puede hacer es leer blogs.

Ayer había visto que mi compañero Facundo estaba utilizando Firefox 4 Beta 5,  y me pregunté cuales eran las diferencias y mejoras que se planteaban agregar en esta nueva versión de mi explorador favorito. Por este motivo hoy leí los release notes que figuran en la página de mozilla y entre muchos cambios que nombran uno me llamó la atención y decidí escribir algunas líneas al respecto aquí

La característica en cuestión es CSS :visited selectors have been changed to block websites from being able to check a user’s browsing history. Lo cual se traduce más o menos como El selector :visited de CSS ha sido cambiado para impedir que los sitios puedan chequear las páginas visitadas del usuario

La génesis del problema es que, actualmente, una página web pueda mostrar una larga lista de links y aplicarles por medio del selector :visited un estilo que diferencie los links visitados de los no visitados. Y luego utilizando algunas funciones JavaScript determinar cuales aparecen con un estilo u otro e informarselo al servidor.

En mi humilde opinión, no es un bug que requiera ser arreglado, sinó mas bien una característica y comportamiento de los estilos CSS, sin embargo entiendo los motivo (phishing y malas intenciones) para que se quiera bloquear este posible vector de ataque a la privacidad de un usuario.

Sin embargo, lo que más me llamó la atención es la forma en que plantean resolverlo, que básicamente son

  1. Algunas funciones de javascript mentirán en sus resultados para no delatar las páginas visitadas
  2. Limitar muchísimo los estilos que se podrán aplicar al selector :visited reduciéndolos básicamente a sólo cambiar de color

Ante semejante limitación, en esa misma página, se alzaron las voces a favor y en contra con argumentos muy interesantes de ambos lados.

Desde mi posición de ignorante amateur, la idea que Javascript mienta si bien en primera instancia no me pareció mala, me gustó mucho más el que en lugar de mentir se generen errores cuando se intenten acceder a propiedades que deberían ser limitadas.

Si bien muchas páginas que actualmente funcionan correctamente, comenzarían a mostrar errores por culpa de javascript, no creo que existan muchas que realmente necesiten acceder a las funciones que están involucradas. En cambio el mentir en lo que retorna una función me parece simplemente equivocado.

Es, sin embargo, el segundo punto que nombro el que mas me inquieta

Aunque no soy un diseñador experimentado he utilizado en varias ocaciones el pseudo selector :visited para agregar información al usuario resaltándole los links no visitados de los que ya ha estado navegando.

En algunos casos esto lo he realizado utilizando diferentes colores, o subrayando el texto, pero en muchos mi estrategia fue agregar un borde, o cambiar el tamaño de una tipografía o incluso pasandola a mayúsculas o minúsculas.

Ninguna de estas acciones funcionará con el nuevo modelo, por lo que algunos sitios dejarán de funcionar correctamente. Afortunadamente este cambio no hará al sitio inusable, pero si lo afectará visualmente. e incluso limita mis posibilidades de diseño.

Por otro lado, como bien dicen en el sitio de mozilla, otros engines de renderización html, como WebKit (el  utilizado por Google Chrome) están implementando las mismas restricciones por lo que es algo bueno que todos tomen las mismas medidas (sería muy desagradable y problemático que algunos tiren errores, otros mientas, etc) y además deberemos convivir con estas limitaciones, porque si la mayoría de los exploradores las adopta, serán unas limitaciones que llegarán para quedarse.

Esperemos que no afecte tanto como algunos dicen, aunque supongo que afectará más de lo que los optimistas piensan. De mi parte me adaptaré a los tiempos actuales, y trataré de ir evitando el uso de estas características desde ahora.


Discussion Area - Leave a Comment