CORS环境中的内容安全策略违规

时间:2017-05-27 17:54:09

标签: angular asp.net-web-api2 content-security-policy

我有一个角度2客户端,资源服务器和身份验证服务器。一切都在顺利进行,直到我今天下午戛然而止

这是我得到的错误的图像

enter image description here

让我补充一点,我已经看到了与此相关的几个问题,并尝试了几乎所有规定的解决方案都无济于事

我还有以下课程,可以为我提供此政策违规的保障

 public class SecurityHeadersAttribute : ActionFilterAttribute
{
    public override void OnResultExecuting(ResultExecutingContext context)
    {
        var result = context.Result;
        if (result is ViewResult)
        {
            if (!context.HttpContext.Response.Headers.ContainsKey("X-Content-Type-Options"))
            {
                context.HttpContext.Response.Headers.Add("X-Content-Type-Options", "nosniff");
            }
            if (!context.HttpContext.Response.Headers.ContainsKey("X-Frame-Options"))
            {
                context.HttpContext.Response.Headers.Add("X-Frame-Options", "SAMEORIGIN");
            }

            var csp = "default-src 'self'";
            // once for standards compliant browsers
            if (!context.HttpContext.Response.Headers.ContainsKey("Content-Security-Policy"))
            {
                context.HttpContext.Response.Headers.Add("Content-Security-Policy", csp);
            }
            // and once again for IE
            if (!context.HttpContext.Response.Headers.ContainsKey("X-Content-Security-Policy"))
            {
                context.HttpContext.Response.Headers.Add("X-Content-Security-Policy", csp);
            }
        }
    }
}

然而,似乎将“Microsoft.AspNetCore.Mvc.Core”从版本1.1.2升级到1.1.3之后,我的封面已被破坏。 我怎样才能应对这一挑战?

1 个答案:

答案 0 :(得分:1)

您的CSP政策需要允许来自https://ajax.aspnetcdn.com的内容。所以尝试改变这个:

var csp = "default-src 'self'";

......对此:

var csp = "default-src 'self'; style-src https://ajax.aspnetcdn.com"; script-src https://ajax.aspnetcdn.com;

但是根据问题中引用的错误消息,Content-Security-Policy标头值似乎已经设置在应用程序代码的那一部分以外的其他位置。

因此,不要使用仅添加其他标头的context.HttpContext.Response.Headers.Add,而是尝试使用context.HttpContext.Response.Headers.Set覆盖现有值。

如果你这样做,你还想删除你所设置的地方周围的if条件。

所以尝试改变这个:

if (!context.HttpContext.Response.Headers.ContainsKey("Content-Security-Policy"))
{
    context.HttpContext.Response.Headers.Add("Content-Security-Policy", csp);
}

...就这样:

context.HttpContext.Response.Headers.Set("Content-Security-Policy", csp);

...所以最后你们一起拥有:

var csp = "default-src 'self'; style-src https://ajax.aspnetcdn.com"; script-src https://ajax.aspnetcdn.com;
context.HttpContext.Response.Headers.Set("Content-Security-Policy", csp);

如果这不起作用,那么您需要在后端代码中找到设置Content-Security-Policy标头值的其他位置,并更改它以使值包括style-src https://ajax.aspnetcdn.com"; script-src https://ajax.aspnetcdn.com