使用a标签时,可能会忽略的一个安全问题

使用a标签时,可能会忽略的一个安全问题文章封面

a标签有什么安全问题?


a标签 _blank 的缺陷:

    当一个链接使用的 target="_blank" 的方式,这个链接会打开一个新的TAB,但会和原始页面[点击链接页]占用一个进程。如果新的页面因为资源过大或有一个很高的加载时间,那么也会影响到原始页面的展示。



同进程产生的问题:

  • 同域: 可以在新页面访问到原始页内的所有内容,包括 document 对象,方法(window.opener.document)
  • 异域:输入不能访问到 document,但仍可以通过  (window.opener.location) 访问到 原始页的  location

    也就是说,在新页面可以使用 window.opener 一定程度上的修改原始页面内容,甚至是href。

安全问题的产生:

    同域的情况下,打开钓鱼网站的可能性还是非常小的,利用同进程的可以访问 document 特性,来做一些操作如QQ登录,登录完后传递回参数。

    但在异域情况下就不怎么乐观了,比如 A 页面打开了 B页面,然后B页面打开了一个钓鱼网站C页,此时C页用能访问到A页的 location,C页[钓鱼网站]修改了A的 location.href 跳转到一个原始页一样的钓鱼网站,当用户切换回 A 进行操作时,就很有可能导致隐私数据的泄露。


如何解决问题?

用标签解决:

    新版本浏览器:

// html code-model
<a href="xxx.xxx" rel="noopener"></a>

    老版本浏览器:

// html code-model
<a href="xxx.xxx" rel="noreferrer">1231456</a>

    兼容写法:

// html code-model
<a href="xxx.xxx" rel="noopener noreferrer"></a>

    这样的写法能保证新页面运行在一个单独的进程里,无法访问  原始页的opener。

用Javascript解决
// javascript code-model
var otherWindow = window.open();
otherWindow.opener = null;
otherWindow.location = url;

如果用open打开页面,则可以通过清除掉 opener 和 location 达到相同的效果。 

    留言 (1)
  • 用户头像 dawang

    加載中...

    音乐封面 点击展开工具栏