为什么 script-src-elem 不使用 script-src 中的值作为后备?

2023-12-21

在实现 csp-header 时,我将我的策略指定为:default-src 'self'; script-src www.gstatic.com;由于我还没有声明script-src-elem我的 CSP 政策中的指令,如中所述this https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src-elemmdn 文档,我期望定义策略script-src用于script-src-elem指令也是如此。但是,我看到违规行为被报告为"violated-directive":"script-src-elem" "blocked-uri":"https://www.gstatic.com/blah/blah".

知道为什么会发生这种行为吗?


在我的一些应用程序中看到完全相同的模式后,我终于找到了问题的根源!

我们看到的奇怪之处是,CSP 报告的主机名是确实 in the script-src指示;我们知道script-src-elem应该回到这些指令。从这个角度来看,这些报道实际上是不可能发生的。

我们发现以下内容:这些报告的来源用户正在使用隐私獾 https://privacybadger.org/浏览器扩展,导致其阻止的主机 (Google) 出现误报 CSP 报告。我没有深入研究它,但这是我关于这是如何发生的理论:

  1. 内容安全策略执行预请求检查 https://www.w3.org/TR/CSP3/#style-src-pre-request用于页面上包含的 JavaScript(例如 gstatic.com 或 google-analytics.com)。预请求检查通过,因为该主机名在策略中是允许的。
  2. 浏览器发起资源请求
  3. PrivacyBadger 通过浏览器的 onBeforeRequest API 拦截请求(请参阅隐私獾来源 https://github.com/EFForg/privacybadger/blob/master/src/js/webrequest.js#L47 and Chrome 文档 https://developer.chrome.com/extensions/webRequest#event-onBeforeRequest)
  4. ProvacyBadger 返回一个代理数据块 https://github.com/EFForg/privacybadger/blob/625a7fdf88c85e693582a802c82326c4a3d50e14/src/js/surrogates.js#L74对于资产。这样做是为了确保代码依赖于真正的 javascript(例如window.ga)不会破坏。
  5. 然后浏览器执行请求后检查 https://www.w3.org/TR/CSP3/#script-src-post-request针对返回的 base64 blob
  6. 请求后检查失败 - 因为策略不允许data: for script-src
  7. 浏览器发送被阻止资产的 CSP 报告。

这看起来可能是一个浏览器错误 - 因为report反映原始资产的第三方主机名;而被阻止的内容实际上是data:通过拦截的请求返回的 blob。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 script-src-elem 不使用 script-src 中的值作为后备? 的相关文章

随机推荐

  • 2.7 CSV模块想要unicode,但不想要unicode

    csvfile open finishedFileName num csv w newline writ csv writer csvfile dialect excel firstline unicode str firstline tr
  • XCode 构建阶段:在后台运行脚本(不阻止构建)

    当我在模拟器中构建和运行 iOS 应用程序时 我希望能够在后台运行脚本 即不阻止构建过程 我试过了osascript path to script 并且还后台运行了一个单独的 shell 脚本 该脚本执行相同的操作 但两者都不起作用 构建停
  • 将公共代码添加为 git 子模块时出现问题:“索引中已存在”

    我想添加一些 git 子模块 我收到了两个共享一些通用代码的项目 共享代码只是复制到两个项目中 我为通用代码创建了一个单独的 git 存储库 并将其从项目中删除 并计划将其添加为git子模块 我使用 git submodule add 的路
  • 如何检查 preg_match() 是否为 False 而不是 True?

    我有这段代码 可确保用户名只是字母和数字 但是我的代码设置方式 我需要它来检查结果是否预匹配 https www php net manual en function preg match php is false 现在它说 如果安全则回显
  • 在组件安装过程中调试包

    我需要在 Embarcadero RAD Studio XE5 中构建为 BCB6 Borland C Builder 6 制作的旧组件 项目是 CPP 项目 组件代码包含在 PAS 文件中 该项目包含6个包 一个设计时间三个包 三个包运行
  • from Gui import * 在 python 3 中?

    我正在尝试这个 import os sys from Gui import import Image as PIL import ImageTk class ImageBrowser Gui def init self Gui init s
  • 通过PowerShell + WinRM传递双引号

    我正在用这个code https stackoverflow com a 13284313 1118239在服务器上执行远程代码 MSI 安装 通过脚本传递双引号是行不通的 我尝试了下面给出的两种变体 3 和 4 以及输出 输入 1 测试命
  • Rails 4 has_secure_password 呈现密码确认可选

    我使用 Rails 4有安全密码在我的用户模型中 技巧说如果我不设置 password confirmation 它永远不会被触发 但为什么当我运行测试时我会收到错误 密码确认不能为空如下 Failures 1 User Failure E
  • 在 Linq to SQL 中连接两个表

    也许是一个非常简单的问题 但我是 Linq to SQL 的新手 我有两张桌子 User UserId name Password Email USER TABLE Id UserId FirstName LastName 我想要一个查询
  • BufferGeometry 偏移量和索引

    我只是想知道 偏移量 和 索引 索引 到底是什么 偏移量例如中提到的https github com mrdoob Three js blob dev src core BufferGeometry js https github com
  • Python 中的桑基图

    有没有一个Python库可以生成桑基图 http en wikipedia org wiki Sankey diagram 我见过这个桑基图应用程序和库列表 http www sankey diagrams com sankey diagr
  • 从一维张量中提取前 k 个值索引

    给定 Torch 中的一维张量 torch Tensor 包含可以比较的值 比如浮点 我们如何提取顶部的索引k该张量中的值 除了暴力方法之外 我还在寻找 Torch lua 提供的一些 API 调用 它可以有效地执行此任务 截至拉取请求 4
  • 如何用动画从 UITableView 中删除行?

    我在从表视图中删除行时遇到问题 当按下行中的删除按钮时 我使用下面的代码 NSIndexPath indexPath NSIndexPath indexPathForRow control tag 100 inSection 0 resul
  • realm-js - 将本地领域数据复制到同步领域

    我在用realm js使用 React Native 在用户的设备上存储数据 并且工作流程中的某个点我想将本地领域中的所有数据复制到同步领域 以保留在 ROS 上 我遇到了一个问题 在我们的模式中 我们通过将引用一个对象的属性添加到另一个对
  • 如何根据对象字符串属性在 Xcode 中设置条件断点?

    我希望能够让调试器在达到特定字符串匹配时中断 举个例子 我可能有这样的事情 Foo myObj self gimmeObj myObj可能有一个名为name 我希望调试器在分配时停止 myObj name isEqualToString B
  • 红外发射器和 Android 5.0

    我在运行 Android 5 0 的 Galaxy S5 上遇到了红外发射器问题 在我更新到 5 0 之前 我的应用程序在我的手机上运行得很好 但现在 我要管理的设备没有任何反应 当我单击应用程序发送红外代码时 LED 指示灯会闪烁 表示红
  • 文本框为空问题

    我的 Access 表单上有一个文本框和一个按钮 在按钮的单击事件中 我想查看文本框是否为空 如果是 则不会执行任何操作 所以我用 If Me textbox Value Null Then Exit Sub End if 但它不起作用 我
  • 如何使用 Apache HttpClient 在 Post 请求中对俄语文本进行编码?

    有如下Java代码 public static void register UserInfo info throws ClientProtocolException IOException JSONException Registratio
  • 使用 Play Framework 作为组件

    我正在尝试添加 Play Framework Web 服务器作为较大应用程序的一部分 但该应用程序的主要用途不是 Web 服务器 它已经接受各种连接 包括串行和 TCP 但我需要添加 WebSocket 并且 Play Framework
  • 为什么 script-src-elem 不使用 script-src 中的值作为后备?

    在实现 csp header 时 我将我的策略指定为 default src self script src www gstatic com 由于我还没有声明script src elem我的 CSP 政策中的指令 如中所述this htt