添加内容安全策略会阻止多个站点'local'托管 JavaScript 和其他站点资源



在向使用各种JavaScript和其他本地资源(如jQuery、字体等(的现有网站添加内容安全策略(CSP(的过程中。

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

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

从这样的CSP开始:

"默认src-https;script src"self";connect-src"self";img src"self";style-src'self';基本uri"self";形式动作"self";

哪些阻止了jQuery、页面功能、导致布局问题等然后转到:

"默认src-https;img src"self"数据:;script src"self"unsafe eval"unssafe inline";style src"self"unsafe inline"report sample";connect-src"self";基本uri"self";形成行动"自我">

在样式src和脚本src上允许"unsafe-eval"one_answers"unsafe inline"似乎至少允许jQuery和各种资源工作。尽管仍然没有涵盖允许一些字体和图标资源,如下图所示。1

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

到目前为止,我发现这些来源对解决这个问题很有用:

  • 内容安全策略(CSP(是如何工作的
  • https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src

如何允许加载这些资源?它似乎是";默认src-https";阻止它们装载的部分。

如果";localhost:50149";添加后,它们似乎加载良好,但当本地ISS更改其端口或将相同的代码部署到多个托管站点时,这就不起作用了。

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

有没有一种方法可以允许来自同一本地主机的资源被允许而不直接知道什么是"本地主机";主机";站点名称将是?

如何允许加载这些资源?它似乎是";默认src-https";阻止它们装载的部分。

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

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

您可以使用default-src http: https:。它是不安全的,因为它允许任何主机源执行省略的回退指令
您可以使用default-src 'self'。如果页面是从localhost:xyz加载的(相同的方案、主机名和端口号(,则'self'将允许从localhost:xyz加载资源
此外,如果仅阻止字体,则可以将font-src 'self'添加到CSP中,而不是使用default-src

如果"localhost:50149";添加后,它们似乎加载良好,但当本地ISS更改其端口或将相同的代码部署到多个托管站点时,这就不起作用了。

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

最新更新