火狐扩展使用POST打开页面



在Firefox扩展中,我需要在新选项卡中打开一个特定的网页,我需要向其发送POST数据。我可以完全控制目标网页(我的服务器)。

到目前为止,我尝试的是..

这实际上是在没有数据的情况下发送 GET(但在 Chrome 中有效。可能是云解决方案提供商的限制。 Chrome 扩展程序开发 - 开机自检到新标签页

我没有在网页上使用生成的FORM,而是尝试了XmlHttpRequest。我可以成功发送 post 请求并获得答案,但我只能以纯文本形式获得响应,并且无法在当前窗口中打开它(在将其插入页面的 BODY 时,我只能获得静态内容而没有工作脚本)

我稍微玩了一下 XHR 响应并尝试:

document.open();
document.write(xhr.responseText);

但我得到"由于 CSP 而阻止了源自身("脚本-src")的加载"。

所以我试图找到如何设置 CSP 和标头的答案,并插入了一个标头:

<meta http-equiv="Content-Security-Policy" content="script-src 'self'">

在本地和远程页面上。不过,这并没有帮助。

请问有人知道解决方案吗?

当您添加"script-src 'self'时,您允许在同一域中访问脚本文件,但内联脚本(如<script> ... </script>)仍将被禁止。

要允许内联脚本,您可以在'self'之后添加'unsafe-inline'部分。但不建议这样做,因为它破坏了CSP试图执行的大部分操作(防止XSS攻击)。您应该为每个内联脚本添加一个带有sha256前缀的 base64 sha256 哈希(假设它是一个静态不变脚本)。例如'sha256-xxxxORCihnocralsomehashgoeshere')。

但是,如果您没有使用内联脚本,则浏览器可能足够智能,知道您正在运行的脚本来自不同的域并阻止它。如果是这样,请尝试在请求页面上的请求中添加特定域。例如,如果要发布到"example.com",则 CSP 将如下所示:

content="script-src 'self' 'example.com'"

最后,您应该知道首选的CSP机制是通过HTTP Header,某些浏览器可能不支持它。它还具有其他限制,因为它不能在帧祖先中使用,也不能挂接到报表 URI。

最新更新