0

在将 Content-Security-Policy (CSP) 添加到使用各种 JavaScript 和其他本地资源(如 jQuery、字体等)的现有站点的过程中。

CSP 似乎甚至会阻止和扫描这些资源,从而破坏正常功能和网站的显示方式。

这些不同的资源是站点的同一站点项目解决方案的一部分。

从这样的 CSP 开始:

“default-src https;script-src ‘self’;connect-src ‘self’;img-src ‘self’;style-src ‘self’;base-uri ‘self’;form-action ‘self’”

哪个阻止了 jQuery,页面功能,导致布局问题等然后去了:

“default-src https ; img-src 'self' data:; script-src 'self' 'unsafe-eval' 'unsafe-inline'; style-src 'self' 'unsafe-inline' 'report-sample'; 连接-src ‘self’;base-uri ‘self’;form-action ‘self’;”

在 style-src 和 script-src 上允许 'unsafe-eval' 和 'unsafe-inline' 似乎至少允许 jQuery 和各种资源工作。虽然仍然不包括允许一些字体和图标资源,如下图所示。1

正如可以在浏览器的开发工具控制台中看到的那样,指示“阻止加载资源”对于托管在站点运行的同一本地主机上的各种字体等。1

这些是我迄今为止发现的有用的资源,可以用来解决这个问题:

如何允许加载这些资源?这似乎是阻止它们加载的“default-src https”部分。

如果添加了“localhost:50149”,它们似乎可以正常加载,但是当本地 ISS 更改其端口或将相同的代码部署到多个托管站点时,这将不起作用。

允许使用相同的设置部署开发站点和多个站点。

有没有办法在不直接知道“主机”站点名称的情况下允许来自同一本地主机的资源?

4

1 回答 1

0

如何允许加载这些资源?这似乎是阻止它们加载的“default-src https”部分。

是的,您没有指定font-src指令,因此它会回退到default-src. 在您的情况下,它的default-src https指令会阻止加载字体,因为:

  • httpsia 是错误的方案来源,正确的是https:(带有冒号)。
  • 指定https:不会解决问题,因为您通过http:(http://localhost:50149/Content/fonts/...)加载字体

您可以使用default-src http: https:. 这是不安全的,因为允许任何主机源用于省略后备指令。
您可以使用default-src 'self'. 如果从(相同的方案、主机名和端口号)加载页面,这'self'将允许加载资源。如果仅阻止字体,您也可以添加到 CSP 中, 而不是使用。localhost:xyzlocalhost:xyz
default-srcfont-src 'self'

如果添加了“localhost:50149”,它们似乎可以正常加载,但是当本地 ISS 更改其端口或将相同的代码部署到多个托管站点时,这将不起作用。

可以指定localhost:*. 星号 (*) 表示任何端口号。或者'self'如上所述使用。

于 2021-04-15T04:34:31.777 回答