内容安全策略 (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>
并通过 nonce
或 hash
允许它。将允许其所有子脚本。
使用 Google's strict CSP.
可以绕过 Safari 的 'strict-dynamic'
错误
这是 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>
并通过 nonce
或 hash
允许它。将允许其所有子脚本。
使用 Google's strict CSP.
'strict-dynamic'
错误