NuxtJS 在构建时生成内联样式和脚本。...我一直无法找到将随机数注入构建过程以解决此问题的方法
从 CSP 的角度来看
- 有3 种类型的内联脚本,使用“nonce-value”可能只允许其中一种
- 内联样式有3 种类型(包括
.setAttribute()
函数的 JS 调用 - 是的,style-src 中也需要 'unsafe-inline'),并且只能使用 'nonce-value' 允许其中一种。
因此,以抽象的形式,你的任务是不可解决的,你需要细节。
假设您只使用<script>...</script>
and<style>...</style>
构造(这些可能允许使用 'nonce-value'),您有 3 个选项:
- 使用“随机值”
- 使用“哈希值”
- 将脚本/样式放入外部文件并使用“自我”
在使用document.createElement('style')的情况下,选择 1 更可取,您只需设置style.nonce = 'generated_base64_value'
属性。因为在这种情况下计算“哈希值”并不容易。
在使用情况下,<script>...</script>
更<style>...</style>
容易计算哈希或将所有内容移至外部文件(选项 2、3)。在这种情况下,使用 cloudflare worker 会使代码不必要地复杂化。
一些中间件会生成很多单独<style>.red {color:red;}</style>
的 ,<style>.r_padd {padding-right:20px;}</style>
等。这对 opts 1、2 来说是一个令人头疼的问题,但通过 opt 3 很容易解决。
如果您使用第三方脚本,例如 Google 跟踪代码管理器,则无法摆脱“unsafe-inline”脚本,在某些情况下也无法摆脱“unsafe-eval”。
PS:没有通用的方法。而且不知道汽车引擎盖下有什么,很难就如何加力提供建议。