当在新标签页中访问网站时,该网站如何重定向现有标签页?

5
我正在尝试在新标签页中打开来自Course Report的页面。通常,我会按照以下步骤进行操作:
<a href="https://www.coursereport.com/schools/flatiron-school" target="_blank">https://www.coursereport.com/schools/flatiron-school</a>

然而,课程报告正在做一些奇怪的事情。如果我使用那个链接,它会:
  • 短暂地正确打开选项卡
  • 选项卡关闭
  • 原始选项卡(我点击链接的地方)重定向到课程报告

我对以下内容感兴趣:

  • 课程报告是如何实现这一点的(新选项卡似乎能够对引用选项卡产生如此大的控制力,这似乎不好)
  • 我可以做什么来防止这种情况并获得默认行为。

我似乎无法在stackoverflow上直接复现,但是在这里可以看到HackMD文档中的行为https://hackmd.io/s/Hy1Ln7g8X


1
很奇怪,没有任何理由为什么选项卡会自动关闭,然后请求的页面在原始选项卡中加载。我已经在 Codepen 中尝试过了,它按预期工作。看起来你的链接上自动附加了一些黑暗的 JS。 - Jeremy Thille
嗯,一个带有“hack”名称的网站链接 - 并且它的行为很奇怪 - 是的,我不会去那里的伙计 - 如果你能在jsfiddle或codepen或任何其他值得信赖的网站上复制这种行为,那么我会检查一下。 - Jaromanda X
是的,代码很干净,在我的编辑器上运行良好,我认为这是由于HackMD Web平台上的事件监听器。 - murugesan ponraj
hackmd.io看起来很可疑,但实际上它只是一个Markdown编辑器(而且非常好用)。如果您想在本地测试它,可以创建自己的.html页面并复制我的HTML片段。这与hackmd无关--它在任何地方都会发生。 - Sixhobbits
2个回答

2

复现行为

因此,您可以通过创建两个文件来复现这个行为:

1.html

<a href="2.html" target="_blank">Go to second page</a>

2.html

<script>
window.opener.location="about:blank";
window.close();
</script>

将目标页面中的源选项卡重新编写可以被用作反向Tabnabbing,这可能很危险。
反向Tabnabbing是一种攻击方式,其中从目标页面链接的页面能够重写该页面,例如将其替换为钓鱼网站。由于用户最初在正确的页面上,他们不太可能注意到它已经被更改为钓鱼网站,特别是如果该网站看起来与目标相同。
防止此行为
正如window.opener的文档所述,您可以通过属性预防此行为,但这仅适用于某些浏览器(Firefox 52+,Chrome 49+,Opera 36+,Safari 10.1+):
某些浏览器中,原始锚点标记上的rel="noopener"属性将防止设置window.opener引用。
<a href="2.html" target="_blank" rel="noopener">Go to second page</a>

我还发现了关于rel=noopener这个页面,它提到了旧浏览器的可能解决方案。

For older browsers, you could use rel=noreferrer which also disables the Referer HTTP header, or the following JavaScript work-around which potentially triggers the popup blocker:

var otherWindow = window.open();
otherWindow.opener = null;
otherWindow.location = url;
您可以将`rel`属性的值组合起来使用,例如`rel="noreferrer noopener"`。

一些IDE的代码检查器/插件已经开始警告这种行为/错误,了解它是一个好习惯! - Widor
谢谢,非常有启发性。对我来说,一个标签页可以设置其打开者的位置似乎很疯狂。 - Sixhobbits
不客气! :) 我同意这很疯狂。这被称为反向Tabnabbing,可能会很危险。 - juzraai

0
你的Javascript代码中有一个在Body上的点击事件。我认为这就是问题所在。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接