使用 Vue.JS 时,我们是否被迫在 CSP 中使用“unsafe-inline”?

2024-05-06

有没有办法让 Vue.js 与 CSP 正常配合?

当我运行我的spa应用程序(由npm run generate使用 Nuxt.js),我会收到几个警告,例如:

拒绝应用内联样式,因为它违反了以下规定 内容安全策略指令:“style-src 'self' 'strict-dynamic' 'nonce-124lk5fjOc4jn7qqLYEsG2jEvxYuqu8J''不安全内联'https:”。注意 如果哈希值或随机数值是,则忽略“不安全内联” 存在于源列表中。

Knowing CSP https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP,有两种正确的方法可以解决此问题:

  1. 使用随机数,Vue.js 必须使用 a 来签署所有生成的脚本和样式nonce属性。但我不认为这能解决任何问题,因为看起来有些 CSS 是内联添加的。

  2. 使用哈希,这实际上是首选的方法,因为哈希准确地保护了我们希望客户端在浏览器上执行的内容。

然而,为了使用哈希值,Vue.js/Webpack 必须能够计算其所有内容的哈希值。scripts and styles, and:

  • 对于每个编译,将它们告诉开发人员,然后他们将添加这些哈希值 https://content-security-policy.com/到 NGINX 配置文件,

or,

  • 能够生成元标签 https://developers.google.com/web/fundamentals/security/csp#the_meta_tag包含哈希值,使此过程对开发人员 100% 透明,开发人员无需配置任何其他内容即可保证良好的 CSP 保护。

Vue.js 是否以任何方式支持这一点?世界上有没有人能够在没有任何“不安全内联”的情况下使 CSP 与 Vue.js 一起工作?


根据Vue.js 文档 https://v2.vuejs.org/v2/guide/installation.html#CSP-environments,运行时构建完全符合 CSP 标准。

Nuxt正在支持云服务提供商配置 https://nuxtjs.org/api/configuration-render#csp通过 webpack 创建哈希值,在动态 SSR 模式下作为标头发送,否则使用元元素(请参阅https://github.com/nuxt/nuxt.js/pull/5354 https://github.com/nuxt/nuxt.js/pull/5354)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Vue.JS 时,我们是否被迫在 CSP 中使用“unsafe-inline”? 的相关文章

随机推荐