为什么不能设置访问链接的字体大小?

哈Ha! 我向您提供文章“为什么不能设置访问链接的字体大小?”的翻译。 吉姆·费舍尔(Jim Fisher)。



访问的链接以紫色显示; 未访问-蓝色。 自网络问世以来,这种差异就已经存在。 但是CSS允许我们使用伪选择器重新配置这些属性:visited! 假设您要使访问的链接变灰并减小其大小,以便向用户显示此链接已被访问。

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

此样式将应用于当前页面:


如预期的那样,将链接涂成灰色会通知我们它已经被访问了,但是字体大小保持不变! 发生这种情况是因为更改字体大小可能是导致漏洞的原因! 如果CSS可以更改字体大小,我(吉姆)可以告诉您是否访问pornhub.com。 但是如何?

网页可用于检查页面上显示的项目。 最明显的方法是使用window.getComputedStyle()。 他讨论了应用于上述访问链接的属性。 根据浏览器的报告:font-size:18px; 颜色:rgb(0,0,238)。

如果getComputedStyle报告访问的链接的字体大小从18px变为6px,我(Jim)将了解该页面已创建了pornhub.com链接,那么我将检查字体大小以确定浏览器的浏览历史记录。 我可以将这些数据用于有针对性的广告,我可以出售您的数据或勒索您,等等。。。通过禁止更改字体大小来关闭安全漏洞:已访问。

但是使用getComputedStyle获得的有关访问链接颜色的信息将是:rgb(0,0,238)-即蓝色。 这是一个谎言-链接为灰色! 对于color属性,浏览器以另一种方式弥补了漏洞的漏洞:它们使getComputedStyle真实价值无处不在,而不是禁止更改。

为什么要使用两种方法? 为什么我们也不能让getComputedStyle说谎在font-size参数上呢? 原因是您可以检查网页的显示元素以及getComputedStyle之外的其他方法。 您还可以使用.pageXOffset或.pageYOffset检查元素在页面上的位置。 更改访问链接的字体大小会影响其他元素的偏移量,因此您可以间接检查访问了哪些链接。 为a:visit禁用字体大小是一个困难但可靠的解决方案。

链接提供了允许的属性(例如颜色)的简短列表,这些属性不应影响页面布局并且无法检测到。 它们都是不同形式的颜色变化。 所有其他CSS属性均被阻止。

从理论上讲,无法确定访问链接的颜色已更改。 唯一的可能是暂时的攻击:例如,如果将颜色更改为粉红色花费的时间比蓝色要长,则页面可以测量显示元素所花费的时间并将其与预期的持续时间进行比较。

PS:
特别感谢您帮助调整Olga Pereverzeva的翻译。

感谢Oleg Yatsenko( Samber )在评论中,他提请注意以下事实:解决此类数据泄漏问题的解决方案首先是在Mozilla中实现的-解决方案的作者是David Baron

Source: https://habr.com/ru/post/zh-CN445052/


All Articles