内容安全策略:Prod 模式下的 Angular 和 Spring Boot 应用程序

Ham*_*mdy 2 content-security-policy spring-boot angular

我正在开发一个 Spring Boot 应用程序,并以 Angular 应用程序作为前端应用程序。后面我发CSP政策如上

.and()
            .headers()
            .contentSecurityPolicy(default-src 'self'; frame-src 'self'; script-src 'self' 'unsafe-inline' https://storage.googleapis.com; style-src 'self' 'unsafe-inline'; img-src 'self'; font-src 'self' object-src; require-trusted-types-for 'script')
Run Code Online (Sandbox Code Playgroud)

当我在开发上运行应用程序并更改 CSP 策略时,我在 Angular 前端的控制台上收到错误,这是正常现象。当我在产品上运行应用程序时,即使我更改了 CSP 策略

默认 src 'self'

该应用程序继续运行,这很奇怪。

所以我的问题是:

  1. Angular 在哪里获取代码上的 CSP 策略?
  2. 在生产模式下,我们可以有 CSP 策略吗?

PS:我使用的是 Angular 版本 8.2.4

Dra*_*g13 5

Angular 在哪里获取代码上的 CSP 策略?

正确的答案是——没有。Angular 代码对 Content-Security-Policy 标头不执行任何操作(也不应该知道)。CSP 标头是浏览器可以获取哪些资源以及可以获取哪些资源的指令。

简单的例子:

Content-Security-Policy: default-src https:
Run Code Online (Sandbox Code Playgroud)

当浏览器看到此指令时,它将拒绝从 HTTP 加载任何内容。如果您尝试从 HTTP 获取脚本,Angular 甚至不会启动,因为没有可用的脚本。

在生产模式下,我们可以有 CSP 策略吗?

是的。CSP 是一个非常有用的工具,可以极大地提高应用程序的安全性。因此,如果您关心您的客户,则应考虑 CSP(以及功能策略)。

但设置起来非常耗时。我花了一两天的时间来找到最适合自己的组合。

试试这个(不要忘记使用 google.api 进行调整):

default-src 'none'; img-src 'self' data:; font-src 'self'; connect-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; object-src 'none'
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!

更新

在这里您可以找到有关 CSP 的更多信息(并且以更好的方式编写)