【问题标题】:CSP frame-ancestors - How to block the entire domain except one page?CSP frame-ancestors - 如何阻止除一页之外的整个域?
【发布时间】:2021-02-02 02:11:02
【问题描述】:

我有一个网站,我想让它显示在另一个域的 iframe 中。 我正在使用 PHP 标头来允许这样做。但是,我只想让我的网站在特定页面上运行,而不是在整个域上运行。

我有这个代码:header ("Content-Security-Policy: frame-ancestors https://example.com/");

我只想允许一个特定的 URL(例如:https://example.com/example.php),但实际上整个域都可以在 iframe 中显示我的网站。

提前致谢!

【问题讨论】:

    标签: php html iframe content-security-policy


    【解决方案1】:

    一般来说,内容安全策略允许在指令中使用path-part 甚至filename。规则script-src example.com/js/script.js 将只允许加载指定的脚本。

    但是frame-ancestors 指令很特殊。 Firefox 在源代码中支持 using paths,但 Chrome 浏览器 - 不支持。

    Chrome 的这种行为很可能是由于框架祖先规范了您的资源在第三方资源上的嵌入这一事实。在此指令中使用路径和文件名将限制第三方资源的所有者在未经您同意的情况下更改 Url 结构。总的来说,这很不方便。

    【讨论】:

    • 那么,如果我只想在特定页面上显示我的网站,你会推荐我什么?我也尝试通过 JavaScript 获取首页 URL,但由于跨域安全性,这是不可能的。
    • 您可以默认通过frame-ancestors 'none' 禁用嵌入并检查$_SERVER['HTTP_REFERER'] - 如果匹配允许的网址,则不要发布frame-ancestor。您可以提供第三方使用您自己的 javascript 来注入 iframe,就像 Google Adsense for Ads 或 Disqus.com/Commento.io cmets 小部件一样。对于 Adsense,您可以将某些域列入黑名单。上述 cmets 小部件显示特定 Url 的 cmets 线程。因此,您的任务通常是可以解决的,但不能使用 CSP。
    • 谢谢!我将使用 $_SERVER['HTTP_REFERER']
    猜你喜欢
    • 2022-12-12
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 2017-05-01
    • 2023-01-07
    • 2017-12-10
    • 1970-01-01
    • 2014-12-05
    相关资源
    最近更新 更多