首页 > 解决方案 > 阻止来自允许 URL 的脚本

问题描述

一、总结

我没有找到我在 Content-Security-Policy 中允许的如何阻止来自 URL 的脚本。


2. 限制

我有一个静态网站。如果 JavaScript 的任何解决方案包括 JQuery 和/或任何其他库,那就太好了;但不是动态站点的解决方案。


3. 目标

我在我的网站中包含第三方框架、视频、小部件等,其中可能包含分析脚本。我不希望我网站的访问者被跟踪。我想阻止请求。

我网站的访问者可以安装一些浏览器扩展程序,以防止在线跟踪。但没有浏览器扩展的用户将被跟踪。

如果网站访问者没有任何阻止工具,我无法找到如何阻止在我的网站上进行在线跟踪。

更多细节在这里


4. 例子

我将 Streamable 视频添加到 HTML:

<!DOCTYPE html>
<html lang="en">

<head>
    <title>Document</title>
    <meta charset="UTF-8">
    <meta http-equiv="Content-Security-Policy" content="default-src 'self' https://streamable.com">
</head>

<body>
    <div style="width:100%;height:0px;position:relative;padding-bottom:100.000%;"><iframe src="https://streamable.com/s/aqg9y/uknjqm" frameborder="0" width="100%" height="100%" allowfullscreen style="width:100%;height:100%;position:absolute;left:0px;top:0px;overflow:hidden;"></iframe></div>
</body>

</html>

5. 重现步骤

我禁用了 Firefox 演示页面中的所有广告和跟踪拦截器 → 我打开了 Firefox 本地控制台。


6. 预期行为


7.实际行为


8. 没有帮助

  1. 谷歌,堆栈溢出搜索
  2. 我尝试阅读文档:

  3. 不跟踪指令:

标签: http2content-security-policy

解决方案


iframe 加载完全独立的文档,如果允许加载,则不受该顶级页面的 CSP 约束。

因此,您拥有实现 CSP 的顶级页面。然后它在 iframe 中加载另一个页面。该页面允许作为顶级页面的 iframe 加载,因为顶级 CSP 允许加载该域。

然后,iframed 页面将完全单独加载。它没有 CSP,因此可以免费加载任何内容 - 包括该页面上引用的分析。

您可以使用 iframe 的 sandbox 属性获得一些您想要的东西- 但是它有一些限制:例如,不允许某些脚本而不是其他脚本是不可能的。并且可以使用图像进行跟踪。

另一种选择是通过您的服务器代理第 3 方内容,然后将 CSP 注入该 iframed 页面,然后让您的顶级页面加载该更改后的页面。例如:

 <iframe src="https://example.com?pagetoload=streamable.com/s/aqg9y/uknjqm" frameborder="0" width="100%" height="100%" allowfullscreen></iframe>

通过 HTTP 标头而不是元标记应用 CSP 也会更容易,因此您甚至不需要更改可流式页面返回的 HTML。

请注意,拥有一个完全开放的代理,可以加载任何页面可能会导致许多其他安全问题,包括但不限于:

以及许多其他类似的问题...


推荐阅读