想象以下场景:用户在attacker.com并在那里玩游戏。就在他点击某个点之前,他会使用浏览器的历史记录重新路由到victim.com。用户以为他点击了attacker.com,但实际上他点击了victim.com,因此涉及了不希望的操作。请参阅http://lcamtuf.coredump.cx/clickit/ 上的演示。
victim.com 的所有者如何防止此类攻击?他应该吗?
想象以下场景:用户在attacker.com并在那里玩游戏。就在他点击某个点之前,他会使用浏览器的历史记录重新路由到victim.com。用户以为他点击了attacker.com,但实际上他点击了victim.com,因此涉及了不希望的操作。请参阅http://lcamtuf.coredump.cx/clickit/ 上的演示。
victim.com 的所有者如何防止此类攻击?他应该吗?
Zalewski 的导航进入和导航离开攻击基于导航而不会使窗口失焦;尤其是在“返回”操作触发 bfcache 的最顺畅的情况下,您甚至不太可能得到oronblur
事件onfocus
!
这些可以通过检测您的窗口已被脚本打开来解决。这可以通过检查window.opener
; window.name
也值得寻找,因为命名窗口可能会被window.open
.
这通常会添加到断帧脚本中,例如:
if (top!==self || opener!==null || name!=='') {
// countermeasure
}
对策是隐藏/停用整个页面内容(不是导航顶部,因为这很容易停止)。
与通常的帧中断器一样,这需要 JavaScript,因此如果它被禁用并且可能会受到 IE 的虚假反 XSS 过滤器的攻击(如果您没有使用 禁用它X-XSS-Protection
),它将无法工作。如果您是一个依赖 JS 并且不需要仅 HTML 可访问性的应用程序,您可以在此处默认拒绝以提高可靠性。
当然,如果您这样做,您或您的合作伙伴也无法在弹出窗口中打开您的页面。
还有其他类似的攻击涉及关闭选项卡或弹出窗口以使您的页面内容出现在指针下方,但它们不如导航多样性攻击流畅。在这些情况下,您确实得到了onfocus
/并且如果有一个您特别关心保护的页面,则onblur
通过使界面在一段时间内处于非活动状态来做出反应是合理的。onfocus
针对整个漏洞类别的一般缓解措施是不通过单击可能直接导航到的页面进行任何危险操作。这听起来很弱,但您可能会发现在许多情况下出于非安全原因您已经自然而然地这样做了,例如删除帐户->“您确定要永久删除您的帐户吗?”。
理论上,网站运营商可以通过使用窗口onfocus
和onblur
事件来防止此类攻击。例如,在窗口onfocus
事件中,可以<div>
在整个页面上创建半秒钟的覆盖,从而阻止与页面元素的交互。虽然我没有看到它在任何地方使用,而且我不怀疑它会受欢迎,因为它可能无论如何都可以绕过。
您所描述的攻击,由Michael Zalewski创建,只是众多概念验证新颖攻击中的一种,它从根本上说明了“网络被破坏”的原因。他之前的一些基于时间的攻击——HTML5 地理定位同意劫持——利用了类似的向量,并已在浏览器级别修复。人们会怀疑这类漏洞将在(可能很远的)未来在浏览器中修复,但由于它们利用可能以各种方式表现出来的人类缺陷,因此修复它们非常棘手。
长话短说:您可以尝试尝试各种事件onfocus
,onblur
但要为浏览器的怪癖做好准备,不要花太多时间在上面。它不太可能被黑帽大肆滥用。