Asp网核内容安全策略实施

时间:2017-10-20 09:35:22

标签: c# asp.net-core content-security-policy

我已经实现了代码来管理我的应用程序中的内容安全策略层。 我的实现基于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 *;";

        // 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 );
        }
    }
}

但是,从下面的图片可以看出,我仍然在浏览器中遇到错误(示例中为Firefox)。这是显示标题的开发者控制台:

Request headers

这些是控制台错误

Console

我做错了什么,尤其是控制台中的最后三个错误?

1 个答案:

答案 0 :(得分:1)

要消除控制台屏幕捕获中的CSP错误,您必须使此标头发生:

Content-Security-Policy:
  script-src 'self' https://cdnjs.cloudflare.com;
  style-src 'self' https://fonts.googleapis.com;
  img-src 'self' data:

(为了便于阅读,上面显示的值分为多行。)

关键点是:

  • 您需要'self'
  • 您需要为您正在加载字体和脚本的第三方https://cdnjs.cloudflare.comhttps://fonts.googleapis.com来源提供原始值
  • 您需要data:在其中设置标记中的data:image/gif网址

如果文档真的也在加载来自https://localhost:5000的资源,那么你也需要在那里加载资源。

如果您的后端已经有一些其他部分正在添加CSP标头,那么了解您使用其他CSP标头添加的任何策略只会使策略更严格,而不是更自由。

因此,如果在其他位置添加的CSP标头比您需要的更严格,那么您必须找到系统中添加该标题的部分,并使其停止。然后你可以添加你需要的更自由的CSP标题。