面试时遇到安全相关的一个题目 :超链接<a>标签带有target=“_blank”属性的,容易被利用进行诸如钓鱼等攻击,请问如何在书写代码时进行防范?(谷歌和火狐环境)。

自己看到这道题目的时候完全是懵逼的,关于web安全,只知道常见的XSS和CSRF,这个真是没听过,知识范围太窄了,呜呜呜~

通过百度之后终于有了解决方案:给a标签添加 rel='noreferrer noopener'。

原因:当使用 target='_blank' 打开一个新的标签页时,新页面的 window 对象上有一个属性 opener,它指向的是前一个页面的 window 对象,因此,后一个页面就获得了前一个页面的控制权。如果给链接添加‘rel=noopener’,再打开后你会发现 window.opener 已经被置为了 null,就无法再获取前一个页面的控制权了。

在chrome 49+,Opera 36+,打开添加了rel=noopener的链接, window.opener 会为null。在老的浏览器中,可以使用 rel=noreferrer。

也可用JavaScript来设置

var otherWindow = window.open(url);
otherWindow.opener = null;
otherWindow.location = url;

参考文章 https://juejin.im/post/5950f387f265da6c44072d6c