今天在群里看到一个朋友的企业站点的 友链目标站点 被篡改后,点击友链目标站点导致当前页面被劫持了的问题,然后在网上搜索了一下。
总结如下:
默认情况下当在页面中打开新页面的时候,新的浏览上下文会对来源页窗口有控制权限 window.opener
,通过该属性可以实现跳转来源页窗口的地址。
A页面代码:
<a href="B页面地址" target="_blank" >链接</a>
B页面代码:
if (window.opener) {
window.opener.location = "https://www.cnblogs.com/dykimy";
}
当用户从A页面跳转到B页面的时候,A页面将会自动跳转到 https://www.cnblogs.com/dykimy 这就实现了某些黑帽的目的。
如何应对这种流氓的B页面呢?
只需要将A页面代码改为如下即可
<a href="B页面地址" target="_blank" rel="noopener">链接</a>
noopener 作用:指示浏览器打开链接而不授予新的浏览上下文对打开它的文档的访问权限-通过在打开的窗口中不设置 window.opener
属性(返回 null
)。
参考网址(HTML 链接类型):https://developer.mozilla.org/zh-CN/docs/Web/HTML/Link_types
参考网址(stackoverflow相关问题讨论):https://stackoverflow.com/questions/50709625/link-with-target-blank-and-rel-noopener-noreferrer-still-vulnerable/50709760