浏览器通常不允许子选项卡/窗口使用脚本关闭其开启器。然而,它们确实允许孩子改变开启标签/窗口的位置。
这导致了一个奇怪的解决方法,您可以创建一个页面,该页面在加载后立即用脚本关闭,然后将父选项卡/窗口的位置更改为这个新页面,有效地关闭它。
这让我问,什么安全问题导致禁用关闭打开器选项卡/窗口的能力,这种解决方法是否有效地创建了后门?
浏览器通常不允许子选项卡/窗口使用脚本关闭其开启器。然而,它们确实允许孩子改变开启标签/窗口的位置。
这导致了一个奇怪的解决方法,您可以创建一个页面,该页面在加载后立即用脚本关闭,然后将父选项卡/窗口的位置更改为这个新页面,有效地关闭它。
这让我问,什么安全问题导致禁用关闭打开器选项卡/窗口的能力,这种解决方法是否有效地创建了后门?
浏览器通常不允许子选项卡/窗口使用脚本关闭其开启器。然而,它们确实允许孩子改变开启标签/窗口的位置。
这并不完全准确。如果您仔细阅读引用的 MDN 文本,它实际上是指 . 的开头,parent而不是与popup. 您可能遇到的实际限制是:
因此,在您的具体示例中,popup是由脚本打开的,但opener是由用户打开的,因此openerdclose本身或popup.
想象一下有两个弹出窗口的场景
closed)opener是用户打开的选项卡)opener是弹出窗口 1)在这种情况下,弹出 2可以弹出 1。
但是,弹出窗口 1 不能显示用户打开的选项卡,因为这违反了上述规则。closeclose
popup在 Chrome 和 Firefox 中, s 是否与它们的 s 同源并不重要opener。根据我上面的第一点,可以根据需要更改popup或location。closeopener
在 IE11 中,popup可以close,parent但不能更改parent.location,除非它符合Same Origin policy。(如果您尝试,会出现新的弹出窗口)
另外,我想澄清一下,任何人opener都可以close拥有自己的 s 或不受限制地popup更改它们。location出于安全原因,对内容的访问popup仍需遵守同源政策。
这导致了一个奇怪的解决方法,您可以创建一个页面,该页面在加载后立即用脚本关闭,然后将父选项卡/窗口的位置更改为这个新页面,有效地关闭它。...这种解决方法是否有效地创建了一个后门?
要直接回答您的问题,没有这样的解决方法。链接的示例将产生错误:
脚本可能不会关闭不是由脚本打开的窗口。
除非您像我上面解释的那样处于 2-popup 的情况,在这种情况下,它可能popup只是直接的。不过,在这种情况下,解决方法将是不必要的。closeopener