第49天 说说你对target="_blank"的理解?有啥安全性问题?如何防范?
Activity
wenyejie commentedon Jun 4, 2019
在新的空白页, 打开该链接,
安全性问题, 就是, 如果url中带有敏感信息, 会被第三方网站读取到document.referer
Yaonie-Jie commentedon Jun 28, 2019
防范:
添加一个属性
justfn commentedon Sep 12, 2019
我在Chrome和IE中测试,发现 document.referer 都为空字符啊, 难道我理解错了?
seho-dev commentedon Sep 19, 2019
w3c介绍: 如果当前文档不是通过超级链接访问的,则为 null。这个属性允许客户端 JavaScript 访问 HTTP 引用头部。
dangjian commentedon Sep 27, 2019
问题
在调用window下的open方法创建一个新窗口的同时,可以获得一个创建窗口的opener句柄,通过target="_blank"点开的窗口活着标签页,子窗口也能捕获opener句柄,通过这个句柄,子窗口可以访问到父窗口的一些属性,虽然很有限,但是却可以修改父窗口的页面地址,让父窗口显示指定的页面。
防范
如果需要限制window.opener的访问行为,我们只需要在原始页面每个使用了target="_blank"的链接中加上一个rel="noopener"属性。
但是,火狐并不支持这个属性值,火狐浏览器里需要写成rel="noreferrer",所以我们可以将两个属性值合并写成rel="noopener noreferrer"来完整覆盖。
<a href="https://www.baidu.com" target="_blank" rel="noopener noreferrer nofollow">内容</a>
nofollow 是HTML页面中a标签的属性值。这个标签的意义是告诉搜索引擎"不要追踪此网页上的链接或不要追踪此特定链接"。
luckyMuChen commentedon Feb 20, 2020
恶意攻击
如果你的网站上有一个使用了 target="_blank" 的 a 标签链接,一旦用户点击了这个链接打开了新的标签页,如果这个标签页跳转的网站内存在的恶意代码,那么你原本页面的网站可能会被转到一个假的页面。也就是说,当用户回到原本的页面时,他看到的可能就是已经被替换过的钓鱼页面了。
步骤如下:
预防
在 <iframe> 中有一个 sandbox 属性,所以你可以使用以下的一些方法来预防链接:
<a>
标签本身支持的 rel 属性,通过指明 rel="noreferrer" 来确保原网页不受新标签页的干扰。处于安全的考虑,现代浏览器支持指定 rel="noopener" 在
<a>
标签上,从而在新打开的标签页里,opener 对象将不可用,其值直接被设置成了 null。zhaoqingkaitt commentedon Oct 19, 2020
请问这个a标签的地址是自己写上去的吗?为啥不写个安全的链接?