🌶️第3期第4题:target="_blank"有哪些问题?
Opened this issue · 1 comments
LinDaiDai commented
target="_blank"有哪些问题?
存在问题:
- 安全隐患:新打开的窗口可以通过
window.opener
获取到来源页面的window
对象即使跨域也可以。某些属性的访问被拦截,是因为跨域安全策略的限制。 但是,比如修改window.opener.location
的值,指向另外一个地址,这样新窗口有可能会把原来的网页地址改了并进行页面伪装来欺骗用户。 - 新打开的窗口与原页面窗口共用一个进程,若是新页面有性能不好的代码也会影响原页面
解决方案:
-
尽量不用
target="_blank"
-
如果一定要用,需要加上
rel="noopener"
或者rel="noreferrer"
。这样新窗口的window.openner
就是null
了,而且会让新窗口运行在独立的进程里,不会拖累原来页面的进程。(不过,有些浏览器对性能做了优化,即使不加这个属性,新窗口也会在独立进程打开。不过为了安全考虑,还是加上吧。)
(参考来源:慎用target="_blank")
laibao101 commented
感谢科普,这个确实是涨姿势了。standard规范里面就有这么一条,用了target="_blank"
就必须加上rel="noopener noreferrer"