内容安全策略,如何为内联脚本动态添加哈希值

时间:2020-06-30 06:51:54

标签: javascript c# visual-studio-2017 http-headers content-security-policy

代替对脚本-src使用'unsafe-inline' 想要使用 sha256-base64Value
尝试使用写方法创建哈希值,效果很好。
但是我不知道如何将特定页面的内嵌脚本发送到该方法。
如果您有其他<动态>动态添加哈希值的方法,可以告诉我,我会尝试的。

这是Global.asax.cs中的代码

      protected void Application_PreSendRequestHeaders()
        {
            if (HttpRuntime.UsingIntegratedPipeline)
            {
                Response.Headers.Remove("Server");
                Response.Headers.Remove("X-AspNet-Version");
                Response.Headers.Remove("X-AspNetMvc-Version");
                Response.Headers.Remove("X-Powered-By");
                Response.AddHeader("Strict-Transport-Security", "max-age=31536000");
                Response.AddHeader("X-Frame-Options", "SAMEORIGIN");
                Response.Headers.Add("X-XSS-Protection", "1; mode=block");
                Response.Headers.Add("X-Content-Type-Options", "nosniff");
                Response.Headers.Add("Referrer-Policy", "no-referrer");
                Response.AppendHeader("Cache-control", "must-revalidate");
#if DEBUG
                string url = HttpContext.Current.Request.Url.ToString();
                string csp_hash = CreateSha256(url);
                Response.AppendHeader("Content-Security-Policy", $"default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'");
#endif
            }
        }

和用于创建特定字符串的哈希值的CreateSha256方法

private string CreateSha256(string script)
        {
            SHA256 hash = SHA256.Create();
            System.Text.Encoding enc = System.Text.Encoding.UTF8;

            byte[] byteValue = hash.ComputeHash(enc.GetBytes(script));
            return Convert.ToBase64String(byteValue);
        }

如果我删除不安全的内联,则会收到类似的错误消息

Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'self' ". Either the 'unsafe-inline' keyword, a hash ('sha256-Wz1Uxb0+2RcaDuihMSqqUC1Tat4XUDjiWRSS+V79Srw='), or a nonce ('nonce-...') is required to enable inline execution.

我什至尝试将当前网址发送到script-src,因为我认为这将允许该特定网址,但是那还是行不通的

如果您需要mpore的详细信息,请告知 任何帮助都很好

0 个答案:

没有答案
相关问题