5

我正在另一个域上使用这样的简单页面测试点击劫持缓解:

<iframe src="https://my.domain/login"></iframe>

我的登录页面发送以下标题:

HTTP/1.1 302 Found
X-Frame-Options: SAMEORIGIN
Location: https://my.domain/landing
...

我很惊讶地看到 IE 10 和 Chrome 33 都遵循重定向并在<iframe>. 我的登录页面没有发送X-Frame-Options,但我希望X-Frame-Options登录页面上的第一个胜过重定向。当我的登录页面显示在框架中时,如何防止浏览器跟随重定向?

<iframe>如果登录页面没有发送 HTTP 重定向,我应该补充一点,事情会按预期工作(为空/被阻止)。

4

1 回答 1

12

根据RFC 7034中使用的术语,我得出结论,浏览器不会对 HTTP 重定向(状态代码 301、302 等)应用 X-Frame-Options 限制,而是对浏览器处理内容的任何响应应用 X-Frame-Options 限制,例如:

使用“X-Frame-Options”允许来自主机 B 的网页声明其内容(例如,按钮、链接、文本等)不得显示在另一个页面的框架(<frame>或)中(<iframe>例如,来自主机 A)。这是由 HTTP 标头中声明的策略完成的,并由浏览器实现强制执行,如此处所述。

或者:

X-Frame-Options HTTP 标头字段指示一个策略,该策略指定浏览器是否应a<frame><iframe>. 服务器可以在其 HTTP 响应的标头中声明此策略以防止点击劫持攻击,从而确保其内容不会嵌入到其他页面或框架中。

作为登录页面的替代方案,您可以返回 HTTP 状态代码 200 和用于重定向的元标记或 javascript,然后将应用 X-Frame-Option,但我承认它很难看。

于 2014-10-09T11:06:34.503 回答