Privacy and the :visited selector
隐私和访问选择器
从历史上看,CSS :visited
选择器已经成为网站查询用户历史的一种方式,通过使用getComputedStyle()
或其他技术来浏览用户的历史记录,找出用户访问的网站。这可以快速完成,不仅可以确定用户在网上的位置,还可以用来猜测关于用户身份的大量信息。
为了缓解这个问题,Gecko 2已经做了一些修改,以限制访问链接可以获得的信息量。
善意的小谎言
第一个变化就是在某些情况下,Gecko会欺骗网络应用程序。特别是,getComputedStyle()
类似的功能,例如element.querySelector()
总是返回值,表示用户从未访问过任何页面上的链接。
另外,如果你使用一个同级连接器,例如:visited + span,在<span>将作为如果该链接是未访问过的风格。
而且,在极少数情况下,如果使用嵌套的链接元素,并且正在匹配的元素与正在测试历史记录中的链接不同,则该元素被绘制为就像该链接未被访问一样。
访问链接样式的限制
您仍然可以在视觉上对访问过的链接进行样式设置,但现在对可以使用的样式有限制。只有以下属性可以应用于访问过的链接:
color
background-color
border-color
(及其子属性)
outline-color
fill
和stroke
属性的颜色部分
此外,即使您可以为访问链接设置的属性,您也无法更改未访问链接和已访问链接之间的透明度,否则您将无法使用rgba()
或使用hsla()
颜色值或transparent
关键字。
下面是一个使用带有讨论限制的样式的示例:
:link {
outline: 1px dotted blue;
background-color: white;
/* The default value of background-color is 'transparent'.
You need to specify a different value, otherwise changes on :visited don't apply */
}
:visited {
outline-color: orange; /* Visited links have an orange outline */
color: yellow; /* Visited links have yellow colored text */
background-color: green; /* Visited links have a green background */
}
对web开发人员的影响
总的来说,这应该会对web开发人员产生太大的影响。然而,这可能需要对网站进行以下修改:
- 使用背景图像对链接进行样式设置,并指出它们是否已被访问将不再有效,因为只有颜色可用于对访问的链接进行样式设置。
- 在Mazilla Hacks中privacy-related changes coming to CSS :visited
- 在Mozilla安全博客中Plugging the CSS History Leak