c# - 未从 HttpContext.Items 填充 Html 属性
问题描述
我的问题似乎很简单,我觉得我遗漏了一些非常明显的东西;但我无法确定为什么脚本元素上的 Nonce 属性没有填充,而是保留了空字符串。
我决定使用 HttpContext 中的 Items 集合来存储 nonce,因为据我所知,它是每个请求的。
Startup.Configure(IApplicationBuilder 应用程序,IHostingEnvironment env)
...
app.Use(async (context, next) => { //CSP
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
byte[] nonceBytes = new byte[32];
rng.GetBytes(nonceBytes);
string nonce = Convert.ToBase64String(nonceBytes);
context.Items.Add("ScriptNonce", nonce);
context.Response.Headers.Add("Content-Security-Policy", string.Format(
"default-src 'none'; " +
"script-src 'self' 'unsafe-eval' 'nonce-{0}'; " +
"style-src 'self'; " +
"img-src 'self' data: https:; " +
"base-uri 'self'; " +
"upgrade-insecure-requests; " +
"object-src 'none'; ", nonce));
await next();
});
...
看法
...
@section Scripts {
<script src="~/lib/jquery-ajax-unobtrusive/jquery.unobtrusive-ajax.min.js" nonce="@Context.Items["ScriptNonce"]"></script>
<script src="~/js/Views/Admin/users_index.min.js" nonce="@Context.Items["ScriptNonce"]"></script>
}
结果:
Nonce 生成,它存在于 HttpContext.Items 中,不填充。
这看起来很简单,我真的很困惑为什么没有填充属性。我对 Web 开发有点陌生,因此如果您有什么特别之处,我们将不胜感激 ASP.Net Core 2 中的任何技巧。
解决方案
推荐阅读
- angular - 如何在保存打印到控制台时打印选定的项目
- angular - 无法访问 ngx bootstrap 中的模态组件内容
- python - 不能使用多进程线程和队列进行 q.get()
- android - Android Studio 3.5 中缺少即时运行
- html - 使用溢出-x:滚动内容将模糊效果固定到 div 的右边缘
- java - 在没有特定属性的情况下访问对象中的模型值
- spring-boot - 在 Spring Boot 中,如何在每次测试之前重置指标注册表?
- r - 在多个数据框中查找匹配值
- c - 我们可以通过另一个包含我们希望 Pointer 指向的其他变量的地址的变量将地址分配给指针吗?
- spring-boot - Controller 中的现场服务需要一个 bean,但找到了 3 个: