内容安全策略 (CSP) 隔离是否可行?

Is Content Security Policy (CSP) Isolation possible?

这是 question/problem,我提供了来自我们业务领域的 JavaScript(例如 www.mysite.com/js/metrics.js),它包含在 20 多个不同的网络应用程序中,并包含在他们的头部文件。它用于分析跟踪。我假设我需要通过使用 script-src 元标记更新 DOM 来设置 CSP,该标记仅适用于我的代码和它调用的外部 JavaScripts(来自 Akamai CDN assets.adobedtm.com),而不是整个网络应用程序。是否有可能或将我的 CSP 元标记应用于网络应用程序加载的任何外部脚本,我必须知道每个外部 JavaScript 所有网络应用程序加载?有什么办法可以做到这一点?有任何想法吗?这是我第一次做 CSP,所以我可能没有正确理解它......所以要温柔!

谢谢!

是的,您的 CSP 元标记将应用于网络应用程序加载的任何外部脚本,并且通常您必须知道每个外部 JavaScript 所有网络应用程序加载。
但是,如果您加载的所有脚本都来自 assets.adobedtm.com,您可以将此源添加到 script-src 指令:

 script-src assets.adobedtm.com

并且所有来自它的外部脚本都将被允许。

CSP 还提供了做你想做的事情的可能性——'strict-dinamic' 令牌与 'nonce-value''hash-value' 配对。但 Safari 仍然没有实现这一点(Chrome、Edge 和 Firefox 都支持)。如果您有 'nonce-value' 的 CSP,例如:

 script-src 'nonce-SomeSecureValue' 'strict-dinamic';

比:

 <script src='https://domain/script.js' nonce='SomeSecureValue'>

将被允许加载,它插入的任何子脚本也将被允许。

如果 CSP 具有 'hash-value'

 script-src 'sha256-HashOfScriptAllowed' 'sha256-HashOfScript2Allowed' 'strict-dinamic';

比:

 <script src='https://domain/script.js' integrity='sha256-HashOfScriptAllowed'>

将被允许加载,它插入的任何子脚本也将被允许。但是 Firefox 有一个错误,它只支持 'hash-value' 内联脚本,不支持外部脚本。

或者您可以使用内联 <script nonce='SomeSecureValue'> dynamically create script tags and load external scripts</script> 并通过 noncehash 允许它。将允许其所有子脚本。
使用 Google's strict CSP.

可以绕过 Safari 的 'strict-dynamic' 错误