刚看到FF新版本修复了一个getComputedStyle的漏洞。
感觉很有趣, 就google了下。
找到一段代码是这么写的:
代码
function hasLinkBeenVisited(url) {
var link = document.createElement('a');
link.href = url;
document.body.appendChild(link);
if (link.currentStyle) {
var color = link.currentStyle.color;
if (color == '#ff0000')
return true;
return false;
} else {
link.setAttribute("href",url);
var computed_style = document.defaultView.getComputedStyle( link, null );
if (computed_style) {
if (computed_style.color == 'rgb(255, 0, 0)')
return true;
}
return false;
}
}
var link = document.createElement('a');
link.href = url;
document.body.appendChild(link);
if (link.currentStyle) {
var color = link.currentStyle.color;
if (color == '#ff0000')
return true;
return false;
} else {
link.setAttribute("href",url);
var computed_style = document.defaultView.getComputedStyle( link, null );
if (computed_style) {
if (computed_style.color == 'rgb(255, 0, 0)')
return true;
}
return false;
}
}
也就是说, 创建一个a标签, 然后检测style
就可以知道这个连接是否被访问过了。
然后FF的修正方式是:
永远像“用户的浏览器从未访问过任何网站” 那样返回值。
额, 难道说的“获取用户访问历史” 的漏洞, 就是这样一个一个连接的检测吗?