如何将NWebSec生成的nonce添加到script标签的其他自定义属性中
问题解答
你的需求完全可以通过NWebSec实现,NWebSec生成的nonce支持在后端直接获取,无需通过前端间接赋值。
不同开发环境的实现方式
1. ASP.NET Core 环境
你可以通过注入ICspNonceProvider服务直接获取当前请求对应的nonce值:
- Razor视图内使用示例:
@inject NWebsec.AspNetCore.Middleware.ICspNonceProvider CspNonceProvider <script nws-csp-add-nonce="true" data-nonce="@CspNonceProvider.GetNonce(HttpContext)"> // 你的脚本内容 </script>
- 控制器内获取时,直接在构造函数注入
ICspNonceProvider,调用GetNonce方法传入当前HttpContext即可拿到同一nonce值。
2. ASP.NET MVC(.NET Framework)环境
你示例中用到的@Html.CspNonce()就是NWebSec官方封装的HtmlHelper扩展,直接使用即可,你写的示例代码本身就是合法可用的:
<script nws-csp-add-nonce="true" data-nonce="@Html.CspNonce()"> // 你的脚本内容 </script>
补充说明
通过上述方式拿到的nonce值,和NWebSec识别nws-csp-add-nonce="true"属性后自动添加到script标签nonce属性的值完全一致,不存在不一致导致CSP校验失败的问题。
针对你的GTM使用场景,后端直接写入data-nonce属性的方案比前端JS赋值的方案更稳妥,不会出现脚本执行时序导致的nonce获取失败问题。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

