2

私のASP.NET Core MVC(ASP.NET Core 2)アプリケーションにawesomeというフォントを追加する際に問題が発生しました。私は単に、素晴らしいawesomeというCSSライブラリをMVCプロジェクトに追加しようとしています。私はそうASP.NET Core MVCアプリケーションで素晴らしいフォントを使用できないのはなぜですか?

<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css"> 

のような素晴らしいCDNフォントを追加する二つのアプローチ )を試してみましたが、私はCDNを追加するとき、私はChromeでCSPエラーが発生します

スタイルシートをロードするために拒否 'http://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css' は、次のコンテンツセキュリティポリシーの指示に違反しているため、 "default-src 'self'"に違反しています。 'style-src'は明示的に設定されていないので、 'default-src'がフォールバックとして使用されます。

正しいメタタグを追加しようとしました。私はたくさんの組み合わせを試みましたが、何も動作していないようでした。たとえば、

<meta http-equiv="Content-Security-Policy" 
    content="script-src 'self' http://maxcdn.bootstrapcdn.com 
    'unsafe-inline' 'unsafe-eval'; 
    style-src 'self' http://maxcdn.bootstrapcdn.com 
    'unsafe-inline' 'unsafe-eval'; " /> 

ChromeのCSPに関連するエラーがまだ発生していました。

2)私が取った2番目のアプローチは、私のプロジェクトに素晴らしいCSSファイルを追加することでした。私はこれをしなかったし、そのようにように対応する参照を追加しました:

GET http://localhost:5000/fonts/fontawesome-webfont.woff2?v=4.7.0 net::ERR_ABORTED 
GET http://localhost:5000/fonts/fontawesome-webfont.woff?v=4.7.0 net::ERR_ABORTED 
GET http://localhost:5000/fonts/fontawesome-webfont.ttf?v=4.7.0 404 (Not Found) 

私は見て:私はこれをしなかった場合は

<link rel="stylesheet" href="~/css/font-awesome.min.css"> 

は、私は、ファイルの正しい場所にいると正しく参照されているにもかかわらず、次のエラーを得ましたこの問題が静的ファイルハンドラに関連する可能性があることが判明しました。私は、このようなオプションパラメータ取るapp.UseStaticFiles()を修正:

StaticFileOptions staticFileOptions = new StaticFileOptions(); 
FileExtensionContentTypeProvider typeProvider = new FileExtensionContentTypeProvider(); 
if (!typeProvider.Mappings.ContainsKey(".woff2")) 
{ 
    typeProvider.Mappings.Add(".woff2", "application/font-woff2"); 
} 

if (!typeProvider.Mappings.ContainsKey(".woff")) 
{ 
    typeProvider.Mappings.Add(".woff", "application/font-woff"); 
} 

if (!typeProvider.Mappings.ContainsKey(".ttf")) 
{ 
    typeProvider.Mappings.Add(".ttf", "application/font-ttf"); 
} 
staticFileOptions.ContentTypeProvider = typeProvider; 
app.UseStaticFiles(staticFileOptions); 

をしかし、私はまだ上記のエラーを得ました。

誰かが私が間違っていることを知っていますか?私は、CDNで素晴らしいフォントを追加したり、必要に応じてフォントの素晴らしいCSSファイルをアプリケーションに追加したりすることができます。

+1

あなたの文書は、 'default-src 'self''を持っていて' style-src'を持たないという点で比較的厳しいContent-Security-Policy HTTPヘッダーで提供されています。次に、ドキュメント自体に 'meta'要素を使って厳密ではない厳密なポリシーを指定します。しかし、複数のポリシーを指定するときにCSPが動作する方法は、最も厳しいポリシーが常に勝ちます。したがって、ブラウザは基本的に 'meta'ポリシーを無視し、HTTPヘッダーで指定されたポリシーを使用するだけです。この場合の唯一の解決策は、Content-Security-Policyヘッダーに異なる値を送信するようにサーバーコードを変更することです。 – sideshowbarker

+0

もう少し詳しいことを教えてください。 Content-Security-Policyを指定した唯一の場所は、サーバー側のHTMLページのメタデータタグです。ヘッダーを変更するのは他に何ですか?私は2番目のアプローチを試みましたが、その後コードを削除しました。また、あなたがこれを答えに入れたり、動いている答えにつなげるなら、私はそれを受け入れます。 –

+1

詳細については、ドキュメントのレスポンスヘッダーを見ると、Content-Security-Policyヘッダが見つかるはずです。これらのヘッダーを表示するには、ブラウザのdevtoolsでネットワークペインを開き、ドキュメントを再読み込みしてそこの応答を調べるか、レスポンスのHTTPヘッダーを調べるためのPostmanや 'curl'などのコマンドラインツールを使用します。だからあなたがContent-Security-Policyヘッダーを見つけても、サーバーサイドのコードがそれをレスポンスに追加する場所/方法がわからないなら、おそらく別の新しい質問を投稿して。 – sideshowbarker

答えて

1

質問のエラーメッセージで引用されたポリシーにはdefault-src 'self'が含まれていますが、meta要素のポリシーは表示されません。これは、文書がmetaのものに加えて、Content-Security-Policy HTTPヘッダーのポリシーで提供されていることを示しているようです。

このポリシーは、default-src 'self'で、style-srcでないという点で比較的厳しいポリシーです。したがって、metaを使用して厳しくないポリシーを指定しているときに、複数のポリシーを指定したときにCSPが動作するという問題は、最も厳しいポリシーが常に優先します。したがって、お使いのブラウザは基本的にあなたのmetaポリシーを無視し、HTTPヘッダーで指定されたポリシーを使用しています。

解決方法:サーバーコードの場所に、Content-Security-PolicyというHTTPヘッダーを追加して、正確なポリシーが設定されているように変更するか、サーバーコードのその部分を完全に削除してくださいmeta要素を使用してポリシーを設定します。

+0

私は、これらのヘッダーが私のバックエンドによって手動で設定されていることを認識しませんでした。一度私はそれらを削除したすべてが働いた。 –

関連する問題