在Firefox扩展程序中,我需要在新标签页中打开一个特定的网页,我需要向其发送POST数据。我完全控制目标网页(我的服务器)。
到目前为止,我所尝试的是......
这实际上是在没有数据的情况下发送GET(但在Chrome中有效。可能是CSP限制..) Chrome Extension Development - POST to new tab
我没有在网页上使用生成的FORM,而是尝试了XmlHttpRequest。我可以成功发送帖子请求并获得答案,但我只能以纯文本形式获得响应,并且无法在当前窗口中打开它(我只有在将脚本插入页面时才能获得静态内容而无需工作脚本。 s BODY)
我玩了一下XHR响应并尝试了:
document.open();
document.write(xhr.responseText);
但是我得到了#34;由于CSP"阻止了源自身(" script-src")的加载。
所以我试图找到答案如何设置CSP和标题,我插入了一个标题:
<meta http-equiv="Content-Security-Policy" content="script-src 'self'">
在本地和远程页面上。但这并没有帮助。
有人知道解决方案吗?
答案 0 :(得分:0)
添加"script-src 'self'
时,您允许在同一个域中访问脚本文件,但仍然不允许使用内联脚本(如<script> ... </script>
中所述)。
要允许内联脚本,您可以在'unsafe-inline'
之后添加'self'
部分。但不推荐这样做,因为它击败了CSP试图做的很大一部分(防止XSS攻击)。您应该添加每个内联脚本的base64 sha256哈希(假设它是一个静态不变的脚本),并带有sha256
前缀。例如'sha256-xxxxORCihnocralsomehashgoeshere'
)。
但是,如果您没有使用内联脚本,那么浏览器可能足够聪明,知道您运行的脚本来自不同的域并阻止它。如果是这样,请尝试在请求页面上的请求中添加特定域。例如,如果您要发布到&#39; example.com&#39;,您的CSP将如下所示:
content="script-src 'self' 'example.com'"
最后,你应该知道首选的CSP机制是HTTP Header,有些浏览器可能不支持它。它还有其他限制,因为它不能用于框架祖先,并且无法连接到报告文件。