2017-10-20 4 views
1

私はアプリケーションでコンテンツセキュリティポリシーレイヤーを管理するコードを実装しました。 私の実装はActionFilterAttributeに基づいていますが、これはここで利用可能なコードに基づいています(簡単にするために質問に含めています)。Aspネットコアコンテンツセキュリティポリシーの実装

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

あり、expecially内の最後の3つのエラーについてコンソール?あなたはこのヘッダを起こらせる必要があり、コンソール画面キャプチャでCSPエラーを排除するために

+0

問題のコードスニペットは、あなたが 'Content-Security-Policy:default-src *;'ヘッダを設定しているようだが、開発者コンソールスクリーンキャプチャは 'Content-Security-Policy: src 'self; style-src 'self'、img-src 'self''である。どうして? – sideshowbarker

+0

ヘッダーにコンテンツセキュリティポリシーを追加したコードブロック(標準に準拠するブラウザ用に一度コメント付きのコードブロック)は、キーが既にヘッダーに存在するため実行されないようです。解決策は簡単かもしれませんが、誰がそれを追加したのか理解したいと思っています... – Lorenzo

+0

私は、表示されたコンソールエラーが 'script-src:https:// localhost:5000'と'style-src:https:// localhost:5000' ... – sideshowbarker

答えて

1

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

(上記のように示されている値は、単に読みやすくするために、複数行にわたって分割されます。)

キーポイントは以下のとおりです。

  • はあなたがトンを必要とするが
  • 'self'を持っている必要がありますOあなたは
  • からフォントやスクリプトをロードしているあなたは、あなたのマークアップ

data:image/gif URLを許可するようにそこにdata:を持っている必要があり、サードパーティhttps://cdnjs.cloudflare.comhttps://fonts.googleapis.com起源やIFの原点の値を与えます文書は実際にはhttps://localhost:5000からもリソースをロードしています。

バックエンドにCSPヘッダーを追加する部分が既にある場合、追加するCSPヘッダーを追加するポリシーは、ポリシーをより自由ではなく厳しくすることができるということを理解することが重要です。

他の場所に追加されているCSPヘッダーが必要以上に厳しい場合は、追加するシステムの部分を見つけて停止させる必要があります。そして、あなたはより自由なCSPヘッダーを追加することができます。

関連する問題