Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Spatie/laravel-CSP软件包如何处理直列脚本和样式的动态nonces


Spatie/laravel-CSP软件包如何处理直列脚本和样式的动态nonces


Spatie/laravel-CSP软件包通过每HTTP请求生成唯一的非CE值来处理内联脚本和样式的动态NONCE,并自动将其注入内容安全策略(CSP)标题和相关的HTML元素。这是关于其工作原理的详细说明:

Nonce Generation

- 该软件包使用非司机接口为每个请求动态生成一个非CE字符串。
- 默认情况下,您可以实现自己的Nonce Generator类,该类返回唯一的随机字符串。例如,您可以通过创建使用“ laravelVitenonCegenerator”类的类来与Laravel Vite的Nonce系统集成,该类别使用`vite :: cspnonce()`以获取资产汇编期间Vite生成的nonce。
- 您在软件包的`csp.php`配置文件的`nonce_generator`密钥中指定了nonce Generator类。

###将Nonces应用于政策

- 在您的CSP策略类中(通常扩展``spatie \ csp \ policies \ basic''),您使用诸如`addnoncefordiractive(Directive :: scriptive :: script)`and AddNoncefordirative(Directive :: style)之类的方法,以表明应将其添加到nonce中。
- 这确保了这些指令的CSP标头中包含生成的NONCE,从而允许将匹配的nonce属性执行的内联脚本和样式执行。

###中间件和标头注入

- 该软件包提供了您在HTTP内核或特定路由上注册的中间件(`spatie \ csp \ addcspheaders')。
- 此中间件为请求生成NONCE,应用包括NONCE指令在内的CSP策略,并将适当的CSP标头添加到HTTP响应中。
- 在请求中,NONCE值是一致的,因此您可以使用诸如`@nonce`或辅助函数之类的刀片指令''或``csp_nonce''(在您的视图中)以输出inline或`````'''标签上的nonce属性。

###与Laravel Vite集成

- 使用Laravel Vite时,该包可以通过`vite :: cspnonce()`。
- 您可以创建一个自定义的Nonce Generator类,该类别从VITE返回NONCE,以确保CSP标头中使用的NONCE与应用于Vite注射脚本和样式的NONCE匹配。
- 这避免了由Nonce不匹配引起的CSP违规行为,并允许使用Vite-Power的Laravel应用程序中的安全内联脚本/样式。

###其他功能

- 当您无法控制HTTP标头时,该软件包还支持将CSP策略作为元标记(通过`@cspmetatag`Blade Directive)。
- 它支持仅报告模式用于测试CSP策略而不阻止资源的模式。
- 您可以为不同环境定制政策(开发与生产)。

###实用笔记

- 您必须使用刀片`@nonce`指令或`csp_nonce()`helper确保在内联脚本/样式上输出nonce;否则,浏览器将阻止它们。
- 像Chrome这样的浏览器可能会从动态注入的脚本标签中剥离NONCE属性,因此请仔细使用NONCE并测试行为。
- NONCE是每个请求生成的随机字符串,仅允许具有正确的nonce的人执行内联脚本/样式。

总而言之,Spatie/laravel-CSP通过可配置的Nonce发电机动态生成Nonce,在CSP标题中包含此NONCE的脚本和样式,并提供刀片指令和帮助者,以在内联元素上输出nonce属性。这种集成,尤其是与Laravel Vite,可确保CSP安全地允许内联脚本和样式,而无需使用不安全的内线,增强了应用程序安全性,同时保持功能[1] [2] [3] [4] [4] [6]。

引用:
[1] https://github.com/spatie/laravel-csp
[2] https://laravel.io/forum/laravel-mix-and-content-security-policy
[3] https://laravel-news.com/package/package/spatie-laravel-csp
[4] https://stackoverflow.com/questions/75106343/nonce-is-Always-Always-empty-when-using-spatie-laravel-csp-with-with-with-with-laravel-and-vite-js
[5] https://github.com/spatie/laravel-csp/discussions/96
[6] https://stackoverflow.com/questions/77459507/how-to-to-to-cad-csp-nonce-ince-inline-inline-style-------- scripted-by-vue-vue-in-a-a-a-laravel-and
[7] https://www.stackhawk.com/blog/laravel-content-security-policy-guide-what-is-is-is-and-is-and-how-how-to-enable-it/
[8] https://stackoverflow.com/questions/78864184/enable-nonce-to-to-laravel official-packages
[9] https://developer.mozilla.org/en-us/docs/web/http/headers/content-security-policy/script-script-src