点击劫持
可能发生的威胁
通过点击劫持攻击,可能会出现以下威胁。除了仅限于鼠标操作的处理之外,其威胁与 CSRF 攻击相似。
- 利用仅对登录用户可用的服务
- 用户发布意外信息,用户执行意外退会等
- 更改仅有登录用户可编辑的设置
- 更改用户信息的公开范围等
需要注意的网站特征
通过鼠标操作就可以执行仅对登录用户可用的功能(服务或设置)的网站可能会受到点击劫持攻击的影响。如果指定的处理仅限于鼠标操作,则特别需要注意攻击的袭击。此外,实施对策后,将发生副作用。因此,请考虑网站的信息安全政策和副作用等,以及是否要实施防止点击劫持漏洞的措施。
根本解决
- 在 HTTP 响应头中输出 X-Frame-Options 头部字段,限制其他域的站点通过 frame 元素或 iframe 元素进行读取。
X-Frame-Options 是用于防止点击劫持攻击的头部。通过在 HTTP 的响应头中输出像“X-Frame-Options: DENY”这样的内容,可以在支持 X-Frame-Options 的浏览器中限制页面被 frame 元素或 iframe 元素嵌入。指定的设置值决定限制范围:
- DENY:禁止在所有网页的框架内显示
- SAMEORIGIN:仅允许在相同来源(same origin)网页的框架内显示
- ALLOW-FROM(已废弃):仅允许在指定来源网页的框架内显示。该设置值从未被广泛支持,现代浏览器均已不支持,不要使用;需要允许指定来源时,请改用下述 CSP 的
frame-ancestors指令。
补充:目前的标准做法是使用 Content Security Policy 的 frame-ancestors 指令(例如 Content-Security-Policy: frame-ancestors 'none' 相当于 DENY,frame-ancestors 'self' 相当于 SAMEORIGIN,也可以指定允许的来源列表)。它在现代浏览器中优先于 X-Frame-Options 生效;为兼容旧浏览器,可以两者同时输出。
- 在执行处理之前,再次要求输入密码,并在执行页面上仅在重新输入的密码正确的情况下执行处理。
通过在执行处理之前进行密码验证,可以消除点击劫持漏洞。但是,这种方法需要更改页面设计规格,并会增加用户的操作负担,需要权衡后采用。
保险措施
- 重要处理无法仅通过鼠标操作执行。
点击劫持攻击会通过视觉欺骗引导用户执行特定操作。因此,要求用户进行复杂的操作是困难的。通过插入键盘操作等方式,使处理无法仅通过鼠标操作执行,可以降低攻击成功率。