X-Frame 选项设置为 "DENY DENY"

X-Frame Options set as "DENY DENY"

在某些 Web 应用程序中,我注意到有 X-Frame 选项设置的选项 header 比如

X-Frame-选项:DENY DENY

(DENY 选项应该错误地添加了两次)。

在这种情况下,浏览器是否会像

那样遵守 header

X-Frame-选项:拒绝。

否则它将通过将 "DENY DENY" 视为无意义

来消除此 header 选项无意义

如果是服从,像

这样的场景会发生什么

X-Frame-选项:拒绝同源

浏览器处理 X-Frame-Options: DENY DENY 就好像它只是 X-Frame-Options: DENY

以前是 Safari had a bug that caused it to ignore X-Frame-Options if it had a duplicate value, and Chrome inherited the same bug. And Firefox also previously had pretty much the same bug

但它们已经全部修复:它们的行为与给定一次值时的行为相同。

if it is obeying, what will happen for scenarios like

X-Frame-Options: DENY SAMEORIGIN

对于这种情况,what Mozilla ended up implementing(Safari 和 Chrome 最终跟随)是:

use the most restrictive policy… if the framing situation violates any of them, blocks the load

因此 X-Frame-Options: DENY SAMEORIGIN 的浏览器行为是 DENY(最严格)。

因此,不幸的是,虽然没有权威的规范指出 header 有多个值时所需的行为是什么——因为 the X-Frame-Options spec, RFC 7034 实际上并没有说明要求是什么are——在实践中,当前的 Safari/Chrome/Firefox 行为是预期的行为。不确定 IE/Edge 的作用,但如果它与 Safari/Chrome/Firefox 不同,那么这也是一个需要在 IE/Edge 中修复的错误。