前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CSP | Electron 安全

CSP | Electron 安全

作者头像
意大利的猫
发布2024-04-28 15:53:11
1240
发布2024-04-28 15:53:11
举报
文章被收录于专栏:漫流砂漫流砂

0x01 简介

大家好,今天和大家讨论的是 CSP ,即内容安全策略。相信很多朋友在渗透测试的过程中已经了解过 CSP

内容安全策略(CSP)是一个额外的安全层,用于检测并削弱某些特定类型的攻击,包括跨站脚本(XSS)和数据注入攻击等。这些攻击可能造成数据盗取、网站内容污染、恶意软件分发等

CSP 是一种类似白名单机制,它并不是局限于 Electron ,它是一项 Web 相关协议的策略,你可以通过CSP 配置允许从哪些地方执行 JavaScript 、要求使用安全协议等

一般CSP 有两种配置方式

通过返回包头 Content-Security-Policy

在网页中 <meta> 元素中进行配置

代码语言:javascript
复制
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';" />

https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Content-Security-Policy

我们公众号开启了留言功能,欢迎大家留言讨论~

这篇文章也提供了 PDF 版本及 Github ,见文末

0x02 CSP 基础

CSP 是以一段明文字符串的存在的,所以我们可以直接在网页中的 <meta> 标签中进行测试,比较方便

表现形式是下面这种形式

代码语言:javascript
复制
Content-Security-Policy: <policy-directive>; <policy-directive>

用分号分割多个策略,每个策略内部形式如下

代码语言:javascript
复制
指令名称 <source> <source>;

指令名称很好理解,例如 img-src 是指图片和图标的源地址限制; script-src 是指 JavaScript 的源地址

<source> 是允许的来源,例如 'self' 是限制资源允许来自同源,www.trusted.com 是指允许来自 www.trusted.com 的资源,这里是支持通配符 *

因此接下来的介绍,我们将整体分为指令与值

CSP 值的内容

主机名相关的值

  • https://example.com 允许从特定源加载资源
  • 端口限定:如 https://example.com:443,可以指定特定端口的资源
  • 协议限定:如 https:wss:,只允许使用特定协议的资源
  • 特定路径:如 https://example.com/path/to/resource,可以限制到特定目录或文件
  • 通配符:如 *.example.com,用于允许同一主域名下的所有子域名

协议相关的值

  • data: 允许内嵌的 data: 形式的数据 URI
  • mediastream: 允许内嵌的 mediastream: 形式的数据 URI
  • blob: 允许内嵌的 blob: 形式的数据 URI
  • filesystem: 允许内嵌的 filesystem: 形式的数据 URI

当然还有上面的 http:https:

  • 'self' 允许加载同源资源
  • 'none' 禁止加载任何资源
  • 'wasm-unsafe-eval' 允许加载和执行WebAssembly模块,而无需通过"unsafe—eval"允许不安全的JavaScript 执行
  • 'unsafe-inline' 允许内联脚本和样式(不推荐,除非必要)
  • 'unsafe-eval' 允许使用eval()new Function()等动态代码执行(不推荐,除非必要)
  • 'unsafe-hashes' 允许启用特定的内联事件处理程序。如果您只需要允许内联事件处理程序,而不允许内联<script>元素或 javascript:,则这是一种比使用 unsafe-inline 表达式更安全的方法
  • 'nonce-<base64-value>' 使用加密随机数(一次性使用的数字)的特定内联脚本的允许列表
  • '<hash-algorithm>-<base64-value>' 脚本或样式的sha256、sha384或sha512散列
  • 'strict-dynamic'nonce值或 hash 一起使用时,允许动态生成的脚本,同时忽略其他源列表(除了 'self''unsafe-inline'
  • 'report-sample' 要求在违规报告中包含违规代码的示例
  • 'inline-speculation-rules' 允许在脚本中包含推测规则(试验性技术)

这里大部分比较容易理解,我挑选一些进行介绍

1) data

这个其实就是有些时候通过 data:[<mediatype>][;base64],<data> 这种格式加载资源相关的限制,CSP是白名单,所以默认没有配置 data 的话,肯定是不允许的,因此假设我们允许通过 data插入图片,我们需要进行如下 CSP 配置

代码语言:javascript
复制
Content-Security-Policy: img-src data:;

我们通过一个实验测试一下,一个 Hello World 程序如下

代码语言:javascript
复制
<!DOCTYPE html>
<html>
<head>
<style>
body {
  margin-left: 200px;
  background: #5d9ab2 no-repeat top left;
}

.center_div {
  border: 1px solid gray;
  margin-left: auto;
  margin-right: auto;
  width: 90%;
  background-color: #d0f0f6;
  text-align: left;
  padding: 8px;
}
</style>
</head>
<body>

<div class="center_div">
  <h1>Hello World!</h1>
</div>

</body>
</html>

我们尝试在其中加入 CSP策略,并通过 data 的形式添加一张图片

如果未设置 CSPEdge 浏览器默认是可以正常加载 data 格式的图片的

如果配置 CSPimg-src 未设置 data

代码语言:javascript
复制
<meta http-equiv="Content-Security-Policy" content="img-src 'self';" />

加载失败

如果配置 CSPimg-src 设置 data

代码语言:javascript
复制
<meta http-equiv="Content-Security-Policy" content="img-src 'self' data:" />

正常加载

2) unsafe-inline

'unsafe-inline' 用于指定允许使用内联样式(inline styles)和内联脚本(inline scripts)。在CSP中,内联样式指的是直接在HTML元素的 style 属性中编写的 CSS代码,而内联脚本则是指在HTML文档中使用 <script> 标签直接编写或内嵌的 JavaScript 代码。

嗷,原来这个就是内联,似乎并不是一个好名字

如果禁止内联样式以及内联脚本,则会有效防止注入内联脚本式的 XSS 攻击

3) Nonce

nonce 这个词在加解密的内容中经常遇到,通常表示为一个随机值,是一个在特定上下文中仅使用一次的数字或字符串

CSP 中也差不多,Nonce 是一种在 CSP 中用于允许特定脚本或样式执行的临时凭证。

当启用 Nonce-based CSP 时,服务器会在生成 HTML 页面时为每个可信的内联脚本或样式标签分配一个随机生成的、一次性使用的值(Nonce)。这个 Nonce 随后被嵌入到相应的 HTML 标签中,并同时在 CSP 响应头中声明该 Nonce 可用于允许特定类型资源的加载。

CSP 内容

代码语言:javascript
复制
Content-Security-Policy: script-src 'nonce-randomlyGeneratedValueHere' ...

html 页面内容

代码语言:javascript
复制
<script nonce="randomlyGeneratedValueHere">
  // Your inline script code
</script>

通过 Nonce 这种方式,可以将要加载的内联 JavaScript 固定下来,也就是所谓的白名单,这是一个有趣的方法

4) Hash

Hash(在CSP中通常指的是Subresource Integrity, SRI)是一种基于资源内容散列值的安全机制,用于确保远程加载的脚本或样式文件在传输过程中没有被篡改

服务器为每个外部资源计算一个独特的散列值(通常使用 SHA-256SHA-384SHA-512算法),并将该值以integrity属性的形式包含在 HTML 标签中。CSP 则检查加载的资源是否与提供的散列值匹配。例如:

举例来说,假设你的网站使用了 CSP,并且你希望确保加载的 JavaScript 文件没有被篡改。你可以在 CSP 策略中添加一个指令来验证 JavaScript 文件的完整性。

首先,你需要计算 JavaScript 文件的哈希值,并将其转换为 Base64 编码。例如,使用SHA256 哈希算法计算文件的哈希值,并将其转换为 Base64 编码得到 <hash-algorithm>-<base64-value>

假设计算得到的哈希值为 G0Ty2Cl5vV6z+1bC2Yk7F3V8G9QpN4R6S2Mx8Z0A3T1=,那么你的 CSP 策略中的资源完整性校验指令可能如下所示:

代码语言:javascript
复制
script-src 'self' 'sha256-G0Ty2Cl5vV6z+1bC2Yk7F3V8G9QpN4R6S2Mx8Z0A3T1='

在页面中,引入方式如下

代码语言:javascript
复制
<script src="https://example.com/scripts/app.js" integrity="sha256-G0Ty2Cl5vV6z+1bC2Yk7F3V8G9QpN4R6S2Mx8Z0A3T1=" nonce="random-nonce"></script>

剩下的比较陌生的也确实不是很常见,如果遇到,可以参考下面的文档

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/Sources

解析来的部分是关于指令的


0. default-src

default-src 指令用作其他 CSP 获取指令的 callback。对于以下缺少的每个指令,用户代理都会查找default-src 指令并为其使用此值

简单来说就是部分指令的默认值

  • child-src
  • connect-src
  • font-src
  • frame-src
  • img-src
  • manifest-src
  • media-src
  • object-src
  • prefetch-src
  • script-src
  • script-src-elem
  • script-src-attr
  • style-src
  • style-src-elem
  • style-src-attr
  • worker-src

以下两种配置是等效的

代码语言:javascript
复制
Content-Security-Policy: default-src 'self'; script-src https://example.com
代码语言:javascript
复制
Content-Security-Policy: connect-src 'self';
                         font-src 'self';
                         frame-src 'self';
                         img-src 'self';
                         manifest-src 'self';
                         media-src 'self';
                         object-src 'self';
                         script-src https://example.com;
                         style-src 'self';
                         worker-src 'self'

1. base-uri

base-uri 指令限制了可以应用于一个文档的 <base> 元素的 URL。假如指令值为空,那么任何 URL 都是允许的。如果指令不存在,那么用户代理会使用 <base>元素中的值。 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Content-Security-Policy/base-uri

注意,一些值对 base-uri 没有意义,例如关键字 'unsafe-inline''strict-dynamic'

案例

代码语言:javascript
复制
<meta http-equiv="Content-Security-Policy" content="base-uri 'self'" />

允许页面基础URI(即页面自身所在的源)作为页面中所有相对URL的基础地址,仅允许加载与当前页面同源的资源

2. child-src

child-src 指令定义了使用如 <frame><iframe> 等元素在加载 web worker 和嵌套浏览上下文时的有效来源。对于 worker 来说,不合规的请求会被用户代理当作致命的网络错误处理。 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/child-src

举例来说

代码语言:javascript
复制
Content-Security-Policy: child-src https://example.com/

这样 <iframe>Worker 的地址如果不是 https://example.com/ 就不会加载

3. connect-src

connect-src 指令用于限制通过使用脚本接口加载的 URL https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Content-Security-Policy/connect-src

  • <a> ping
  • fetch()
  • XMLHttpRequest
  • WebSocket
  • EventSource
  • Navigator.sendBeacon()

案例

代码语言:javascript
复制
Content-Security-Policy: connect-src https://example.com/

只允许以上标签和方法请求 https://example.com/

4. fenced-frame-src

这是一个实验性的 CSP fenced-frame-src 指令指定加载到<fencedframe>元素中的嵌套浏览上下文的有效源 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/fenced-frame-src

案例

代码语言:javascript
复制
Content-Security-Policy: fenced-frame-src https://example.com/

5. font-src

这个好理解,加载字体的源的限制 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/font-src

案例

代码语言:javascript
复制
Content-Security-Policy: font-src https://example.com/

此时以下代码就无法加载字体

代码语言:javascript
复制
<style>
  @font-face {
    font-family: "MyFont";
    src: url(?developer/article/2413615/"https:/not-example.com/font");
  }
  body {
    font-family: "MyFont";
  }
</style>

6. form-action

form-action 指令能够限定当前页面中表单的提交地址 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Content-Security-Policy/form-action

案例

代码语言:javascript
复制
<meta http-equiv="Content-Security-Policy" content="form-action 'none'" />

此时下面的代码就会被阻止

代码语言:javascript
复制
<meta http-equiv="Content-Security-Policy" content="form-action 'none'" />

<form action="javascript:alert('Foo')" id="form1" method="post">
  <input type="text" name="fieldName" value="fieldValue" />
  <input type="submit" id="submit" value="submit" />
</form>

<!-- Error: Refused to send form data because it violates the following Content Security Policy directive: "form-action 'none'". -->

之前没有测试过 action 是否可以执行 javascript 代码,看起来像是可以的

测试发现还真的可以,设置了 CSP 策略后就无法执行了

7. frame-ancestors

frame-ancestors 指令指定了一个可以包含<frame><iframe><object>embed 等元素的有效父级。 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors

这个 CSP 专门用于控制哪些网页(即祖先帧)可以嵌套当前页面。它的作用在于防止点击劫持(Clickjacking)等攻击手段,确保网页内容不会在未经授权的上下文中被显示。

8. frame-src

frame-src 指定了可以被 <frame><iframe> 嵌套浏览上下文加载的有效 URL https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-src

案例

代码语言:javascript
复制
Content-Security-Policy: frame-src https://example.com/

此时,下面的 <iframe> 标签加载过程中就会被阻止

代码语言:javascript
复制
<iframe src="https://not-example.com/"></iframe>

9. img-src

没啥说的,图片和图标允许加载的地址 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/img-src

10. manifest-src

manifest-src 是CSP中的一个特定指令,专门用来指定允许加载 Progressive Web App (PWA) 清单文件(即 manifest.json 文件)的来源。当一个网站希望将其Web应用转化为PWA时,会创建一个 manifest.json 文件,该文件包含了关于PWA的一些元数据,如名称、图标、启动画面、主题颜色、显示模式(全屏、最小化窗口等)、服务工作线程(Service Worker)地址等。浏览器通过读取这个清单文件,能够按照PWA的标准对网站进行配置,使其具有类似原生应用的体验,比如添加至主屏幕、离线访问能力等。 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/manifest-src

11. media-src

img-src 类似,可以被 <audio><video> 元素加载的有效源URL https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/media-src

12. object-src

指定了 <object><embed> 元素的有效源URL https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/object-src

13. report-to

report-to 是Content Security Policy (CSP) 中的一个扩展指令,用于指定一个报告端点(reporting endpoint),该端点接收浏览器发送的CSP违规报告。当浏览器检测到页面上的内容加载或执行行为违反了当前设置的CSP策略时,通常会阻止这些不合规的操作以保护用户安全。同时,浏览器会生成一份详细的违规报告,并按照report-to指令指定的方式将其发送给指定的服务器端点。 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/report-to

很少见到开启这个操作的 CSP

14. upgrade-insecure-requests

这个选项用于将网页中 HTTP 协议的资源加载全部提升为 HTTPS,用于提升安全性 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/upgrade-insecure-requests

案例

代码语言:javascript
复制
Content-Security-Policy: upgrade-insecure-requests;

一旦将上述头部设置在计划从 HTTP 迁移到 HTTPSexample.com 域名上,非跳转 (non-navigational) 的不安全资源请求会自动升级到 HTTPS(包括第当前域名以及第三方请求)。

代码语言:javascript
复制
<img src="http://example.com/image.png" />
<img src="http://not-example.com/image.png" />

这些 URL 在请求发送之前都会被改写成 HTTPS,也就意味着不安全的请求都不会发送出去。注意,如果请求的资源在 HTTPS 情况下不可用,则该请求将失败,其也不能回退到 HTTP

15. sandbox

这个和 <iframe>sandbox 很像,主要是对于一些行为进行限制,它不支持 <meta>在网页引入的方式,只能通过返回包的包头中指定 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/sandbox

代码语言:javascript
复制
Content-Security-Policy: sandbox;
Content-Security-Policy: sandbox <value>;

其中 value 可以取以下值

  • allow-forms允许嵌入式浏览上下文提交表单。如果未使用此关键字,则不允许此操作。
  • allow-modals 允许嵌入式浏览上下文打开模态窗口。
  • allow-orientation-lock 允许嵌入式浏览上下文禁用锁定屏幕方向的功能。
  • allow-pointer-lock 允许嵌入式浏览上下文使用Pointer Lock API (en-US)。
  • allow-popups 允许弹出窗口(像window.opentarget="_blank"showModalDialog)。如果未使用此关键字,则该功能将无提示失败。
  • allow-popups-to-escape-sandbox 允许沙盒文档打开新窗口而不强制沙盒标记。例如,这将允许安全地沙箱化第三方广告,而不会对登陆页面施加相同的限制。
  • allow-presentation 允许嵌入器控制 iframe 是否可以启动演示会话。
  • allow-same-origin 允许将内容视为来自其正常来源。如果未使用此关键字,则嵌入的内容将被视为来自唯一来源。
  • allow-scripts 允许嵌入式浏览上下文运行脚本(但不创建弹出窗口)。如果未使用此关键字,则不允许此操作。
  • allow-top-navigation 允许嵌入式浏览上下文将内容导航(加载)到顶级浏览上下文。如果未使用此关键字,则不允许此操作。

16. script-src

script-src 指令指定 JavaScript 的有效源。 这不仅包括直接加载到 <script> 元素中的URL,还包括可以触发脚本执行的内联脚本事件处理程序(onclick)和 XSLT stylesheets 样式表。 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src

17. script-src-attr

script-src-attr指令指定 JavaScript 内联事件处理程序的有效源 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src-attr

相对于 script-src ,这个指令只针对内联 JavaScript 执行,包括 onclick 这种

18. script-src-elem

script-src-elem指令指定<script>元素的有效源 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src-elem

19. style-src

指定了样式表的有效源 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/style-src

20. style-src-attr

为 Dom 中的内联样式表指定了有效源 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/style-src-attr

21. style-src-elem

<style><link> 元素指定了有效源 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/style-src-elem

22. require-trusted-types-for

实验性的技术 这个主要是对抗 Dom-Base XSS 的,检查传递给 Element.innerHTML 的内容,阻止 XSS https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/require-trusted-types-for

require-trusted-types-fortrusted-typesContent Security Policy (CSP)中与 Trusted Types 相关的两个指令,旨在加强网页对 DOM-based Cross-Site Scripting (XSS) 攻击的防御。Trusted Types 是一种高级的防御机制,用于确保浏览器在处理可导致 XSS 漏洞的危险 API(如 innerHTMLdocument.write() 等)时,只能接受经过验证的、安全的值。

require-trusted-types-for 用于指定哪些 DOM API 必须使用 Trusted Types

当你在 CSP 策略中声明此指令时,浏览器将强制在指定的上下文中使用 Trusted Types,否则相关的 DOM 操作将会失败。这可以防止未经验证的字符串直接插入到可能导致 XSSAPI中。

案例

代码语言:javascript
复制
Content-Security-Policy: require-trusted-types-for 'script';

23. trusted-types

实验性技术 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/trusted-types

trusted-types 是CSP指令的另一部分,用于定义允许创建的 Trusted Types 策略以及可信赖的类型创建器(Trusted Type policy creators)。策略创建器是用于生成具体 Trusted Types 对象的函数或类,它们负责验证即将注入到 DOM 中的内容,确保其安全。

使用Trusted Types的基本流程如下:

  1. 定义策略:在JavaScript中编写策略创建器,它们包含对输入内容的安全检查逻辑,确保只有符合安全规范的值才能通过验证。
  2. 在CSP中声明策略:如上所述,在CSP响应头中使用 trusted-types 指令列出允许使用的策略创建器名称。
  3. 应用策略:在实际代码中,使用已声明的策略创建器生成 Trusted Types 对象(如 TrustedHTMLTrustedScriptURL 等),然后将这些对象赋值给相应的DOM属性或方法。

24. worker-src

worker-src 指令指定了 WorkerSharedWorkerServiceWorker 脚本的有效来源。 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Content-Security-Policy/worker-src

案例

代码语言:javascript
复制
Content-Security-Policy: worker-src https://example.com/

以下 WorkerSharedWorkerServiceWorker 被阻止,无法加载

代码语言:javascript
复制
<script>
  let blockedWorker = new Worker("data:application/javascript,…");
  blockedWorker = new SharedWorker("https://not-example.com/");
  navigator.serviceWorker.register("https://not-example.com/sw.js");
</script>

参考文章 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/Sources https://websec.readthedocs.io/zh/latest/vuln/xss/csp.html https://www.ruanyifeng.com/blog/2016/09/csp.html

0x03 Electron 中使用 CSP

https://www.electronjs.org/zh/docs/latest/tutorial/security#7-content-security-policy%E5%86%85%E5%AE%B9%E5%AE%89%E5%85%A8%E7%AD%96%E7%95%A5

Electron 中也是差不多的方式,

本地加载文件创建窗口可以通过在页面中添加 <meta> 标签的形式设置 CSP

远程加载资源创建窗口还可以通过修改 HTTP(s) 返回头的方式设置 CSP

代码语言:javascript
复制
// main.js
const { session } = require('electron')

session.defaultSession.webRequest.onHeadersReceived((details, callback) => {
  callback({
    responseHeaders: {
      ...details.responseHeaders,
      'Content-Security-Policy': ['default-src \'none\'']
    }
  })
})

这种方法对于 file:// 加载资源的时候无效

0x04 CSP 可以突破同源策略吗?

异想天开一下,如果设置了 CSP ,将非同源的网站设置为有效源,可以无视同源策略吗?

index.html

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="Content-Security-Policy" content="script-src http://192.168.31.26/" />
  <title>Content-Security-Policy Test</title>
</head>
<body>
  <h1>Content-Security-Policy Test</h1>

  <!-- 跨源脚本 -->
  <img src="x" onerror="import(unescape('http://192.168.31.26/1.js'))" />
</body>
</html>

访问 index.html

很可惜,虽然收到了请求,但是没有加载成功

这也很容易理解, CSP 其实是另外一层的安全策略,它和同源策略独立的

0x05 CSP 绕过

其实没有什么绕过,无非就是配置得不是很合理或被允许的对象不安全,大家钻漏洞而已,没什么意思,但还是贴一些链接进来

当然,这里我还是要再强调一些 JSONP 的安全问题,网络上大部分 JSONP "服务器"(被访问方)的配置是不安全的,很容易成为绕过 CSP 的利器

https://book.hacktricks.xyz/v/cn/pentesting-web/content-security-policy-csp-bypass https://xz.aliyun.com/t/7372?time__1311=n4%2BxnD0GDtYmqAK0QtDsA3xCqh4jruxiKoq4ex&alichlgref=https%3A%2F%2Fwww.google.com%2F https://geeeez.github.io/posts/xss%E4%B9%8BCSP%E7%9A%84%E5%8E%9F%E7%90%86%E5%92%8C%E7%BB%95%E8%BF%87/

给大家推荐一个自动分析 CSP 策略的网站,它们也有对应的浏览器插件

https://csp-evaluator.withgoogle.com/

输入 CSP 策略字符串或目标URL 即可

浏览器插件更好用一些

0x06 总结

Electron 中,CSP 的意义比网站中更加重要,在防 XSS 方面真的是一把好手,但也会因为一些配置影响正常功能,或者给正常功能开发带来困难,这就又到方便与安全之间的权衡了

0x07 PDF版 & Github

PDF

https://pan.baidu.com/s/1D_UCw74yTOdvCMhkZX7uag?pwd=q318

Github

https://github.com/Just-Hack-For-Fun/Electron-Security

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-04-24,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 NOP Team 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x01 简介
  • 0x02 CSP 基础
    • CSP 值的内容
      • 1) data
      • 2) unsafe-inline
      • 3) Nonce
      • 4) Hash
    • 0. default-src
      • 1. base-uri
        • 2. child-src
          • 3. connect-src
            • 4. fenced-frame-src
              • 5. font-src
                • 6. form-action
                  • 7. frame-ancestors
                    • 8. frame-src
                      • 9. img-src
                        • 10. manifest-src
                          • 11. media-src
                            • 12. object-src
                              • 13. report-to
                                • 14. upgrade-insecure-requests
                                  • 15. sandbox
                                    • 16. script-src
                                      • 17. script-src-attr
                                        • 18. script-src-elem
                                          • 19. style-src
                                            • 20. style-src-attr
                                              • 21. style-src-elem
                                                • 22. require-trusted-types-for
                                                  • 23. trusted-types
                                                    • 24. worker-src
                                                    • 0x03 Electron 中使用 CSP
                                                    • 0x04 CSP 可以突破同源策略吗?
                                                    • 0x05 CSP 绕过
                                                    • 0x06 总结
                                                    • 0x07 PDF版 & Github
                                                    相关产品与服务
                                                    网站渗透测试
                                                    网站渗透测试(Website Penetration Test,WPT)是完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标系统的安全做深入的探测,发现系统最脆弱的环节。渗透测试和黑客入侵最大区别在于渗透测试是经过客户授权,采用可控制、非破坏性质的方法和手段发现目标和网络设备中存在弱点,帮助管理者知道自己网络所面临的问题,同时提供安全加固意见帮助客户提升系统的安全性。腾讯云网站渗透测试由腾讯安全实验室安全专家进行,我们提供黑盒、白盒、灰盒多种测试方案,更全面更深入的发现客户的潜在风险。
                                                    领券
                                                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
                                                    http://www.vxiaotou.com