首页 > 解决方案 > 未从 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 中的任何技巧。

答案:第一条评论nonce 一直都在那里,chrome 隐藏了它。

标签: c#htmlrazorasp.net-core

解决方案



推荐阅读