问题描述
我想将iframe嵌入到firefox扩展的弹出窗口中,但显示“ Firefox无法打开此页面-为了保护您的安全,www.example.com将不允许Firefox显示该页面,如果“,这是因为网站example.com已将Content-Security-Policy
配置为frame-ancestors 'self'
。我可以将其更改为frame-ancestors *
,但我希望范围不广。
解决方法
这取决于弹出窗口的起源(在<iframe src=
或<iframe srcdoc=
中指定的来源)
有些起源是CSP法规的主题,而其他起源则不是。例如,诸如moz-extension:
/ chrome:
之类的供应商方案应绕过CSP。
此外,“自我”令牌可能非常阴险:
,----------------- parent HTTP://example.com --------------------,| |
| * Host-source is HTTP://example.com with the HTTP: scheme |
| |
| <iframe src='HTTPS://example.com'> |
| Content-Security-Policy: frame-ancestors 'self' |
| |
| * 'self' would be substituted by HTTPS://example.com,it |
| means that you actually have the header: |
| Content-Security-Policy: frame-ancestors HTTPS://example.com |
| therefore it will block embedding into parent with |
| HTTP://example.com because of schemes mismatch |
| (HTTP: !== HTTPS:) |
| |
| <iframe> |
|________________________________________________________________|
但是相反的情况(使用HTTPS的父母:使用HTTP:的iframe)不会在CSP3浏览器中引起问题(但会在CSP2浏览器中引起问题)。
,对于IIS,您需要将X-FRAME-OPTIONS标头从“ Deny”更改为“ SAME-ORIGIN”,或者添加X-FRAME-OPTIONS(如果不存在)。为此:
- 打开IIS管理器,然后在左侧树上,左键单击要管理的站点。
- 双击“ HTTP响应头”图标。
- 右键单击标题列表,然后选择“添加”
- 在“名称”中输入“ X-FRAME-OPTIONS”,在值中输入所需的选项,例如“ SAME-ORIGIN”。