lisa的个人博客

慢慢理解世界,慢慢更新自己

0%

代码安全隐患

a标签慎用target=”_blank”

存在问题:
1:新打开的窗口可以通过window.opener获取到来源页面的window对象,即使跨域也可以,通过修改window.opener.location.href=’xxx’,指向另一个地址,这样新窗口可能会把原来的地址改了并进行页面的伪装来欺骗用户。

2:新打开的窗口与原窗口共用一个进程,若是新页面有性能不好的代码也会影响原页面。

解决方案:
1:加上rel=”noopener” 或者 rel=”noreferrer”,这样新窗口打开的window.opener就是null,而且会让新窗口运行在独立的进程里,不会拖累原来的页面的进程。(有些浏览器针对性能的优化即使不加,新窗口也会在独立进程打开,为了安全起见还是加一下比较好)

代码实验:

1
2
3
4
5
6
7
8
// a 标签模拟点击跳转新页面
<a href="http://itlisa.github.io/" target="_blank"> 点击跳转 <a>

// 新页面控制台模拟修改原页面url

window.opener.location.href = 'http://itlisa.github.io';

此时原页面已经被这个'http://itlisa.github.io'这个网站替换掉了。