TonyG
(Tony G)
1
我们在 site1 上安装了 Discourse。我们拥有/管理 site2.tld,并希望通过那里的页面中的 iFrame 访问论坛。我不太懂 CSP 的技术,所以很希望能得到帮助。
我不想禁用祖先限制,但暂时,我取消了 frame ancestor CSP 的勾选:

到目前为止的 HTML 是:
<iframe
style="position:absolute;width:100vw;height:100vh"
src="https://forum.site1.tld">
</iframe>
这仍然导致:
Firefox 无法打开此页面
为保护您的安全,forum.site1.org 不允许 Firefox 显示该页面(如果其他网站已将其嵌入)。要查看此页面,您需要在新窗口中打开它。
我查看了嵌入(Embedding),但该功能似乎有不同的用途。我们不想限制到单个主题,并且用户将不会登录。最初,如果用户不登录并且整个论坛都可以只读访问,那也是可以的。
有什么建议吗?有什么问题吗?
谢谢!
TonyG
(Tony G)
2
有人将他们的 site1 Discourse 嵌入到他们的 site2 中吗?谢谢!
Falco
(Falco)
3
我们不建议,也不测试,通过 iframe 将 Discourse 完全嵌入另一个网站。
相反,我们建议每个网站使用自己的域名,通过链接、单点登录和样式化 Discourse 来匹配您主站点的视觉效果。
2 个赞
TonyG
(Tony G)
5
了解长期后果,我们暂时禁用了 CSP,但仍然收到来自 Firefox 的 CSP 警告。需要重启吗?
这是应用程序/挑战。也许有一个简单的解决方案……
有一个 Discourse 服务器,并且像往常一样,有任意数量的用户帐户和访客。注册用户有一个托管本地 Web 服务器的应用程序。在该应用程序中创建一个网页,并通过 http://192.168.1.1:8080 从本地浏览器访问该网页。该网页通过 IFrame 提供论坛。
我们无法控制提供内容的子网,因此 IP 可能来自任何常见的 NAT/DHCP。但我们对以下内容拥有完全控制权:
- Discourse 安装和服务器。
- 提供的内容。
- 端口号通常是 8080,用户可配置,但永远不会是 80 或 443。
- 由于这是本地内容且非关键任务,因此不进行 SSL 安全保护。
- 用户必须拥有 Discourse 帐户,并且必须登录 Discourse 才能进行写入访问。
关于安全性:
- 公共论坛可通过主机名在网络上访问。
- 网络访问当然始终是 SSL 安全的。
- 除非登录,否则没有人可以创建论坛内容。
- 所以是的,带有 IFrame 的本地页面以 HTTP 形式提供:但 IFrame 源是
HTTPS://forum.site.tld。(这种协议差异可能是导致即使禁用 CSP 也无法访问论坛的原因。)
- 用户启动浏览器以访问本地服务器后,必须输入密码。如果需要,我们可以启用该页面进行 SSL,以保持该父页面与 SSL 启用的论坛站点的 IFrame 之间的一致性。
- 我们没有也不打算通过 IFrame 脚本化 Discourse。我们只想在容器中托管论坛。
以下是一些可能毫无价值的随机想法:
- 允许用户从其 Discourse 帐户页面获取 API 密钥,然后将其放入应用程序中,该应用程序随后将通过 cookie 或其他方式传递给 Discourse。这证实了尽管用户不符合 CORS 或 CSP 标准,但他们有权访问资源。
- 让应用程序将令牌注入 IFrame URI 到 Discourse。同时使用 API 调用让 Discourse 允许使用该令牌进行入站连接。(是的,这需要编码)
- 变得更糟糕……在社区站点上创建一个页面,该页面打开一个 IFrame 来显示子网内容,以及另一个 IFrame 来显示论坛。这个站点可以被授权进行跨源访问。
- 放弃绕过策略的尝试,并使用
target=window 在应用程序窗口外部打开 Discourse。
在不立即诉诸选项 4 的情况下……有什么想法吗?谢谢!