1

私は、ASP.NETのコアアプリケーションを持っていると私は日付、DropDownListコントロールなどの特定のウィジェットなど剣道ウィジェットは、CSPが有効になっている場合は動作しません

アプリケーションがすべてロードされたチャートのASP.NETコアフレームワークのためにTelerikのUIを使用していますjavascripts、images、cssを自分のサーバーから削除します。 「スクリプトを:それは、次の コンテンツセキュリティポリシーの指示に違反しているため、私は

Chromeのコンソールにエラーが表示され、ページの読み込みがインラインスクリプトを実行することを拒否するときので、私はしかし

script-src 'self' 'unsafe-eval'; 
style-src 'self' 'unsafe-inline';  
img-src 'self' data:;  
font-src 'self';  
media-src 'none';  
object-src 'none'; 
child-src https://xxxx.yyyy.com; 
report-uri http://myapplication/csp/report; 

以下のようにCSPのポリシーを有効にしています-src 'self' 'unsafe-eval' "です。 「危険インライン」キーワード、ハッシュいずれ (「SHA256は、oii70XYoqukWS9204nbwatxgYOYcr06 + rftc4egdfUk =」)、またはノンス (「ノンス...」)インライン実行を

これを有効にするために必要とされますそのページで使用しているいくつかの剣道ウィジェットでエラーが繰り返されます。たとえば、日付ウィジェットです。 CSHTMLでは私はすでにTelerikの提案hereとCSP用hereを経てい

<input class="mydate" id="sbDate" name="sbDate" type="date" value="" /><script>jQuery(function(){jQuery("#sbDate").kendoDatePicker({"format":"M/d/yyyy","footer":false});});</script> 

としてHTMLにレンダリング取得

@(Html.Kendo().DatePicker() 
.Name("sbDate") 
.HtmlAttributes(new { @class = "mydate" })) 

以下のように日付を設定しています。そして、私はちょうど私がunsafe-evalウィジェットを動作させるために追加する必要があります。しかし、それは真実ではないように見えます。ウィジェットを動作させるには、unsafe-inlineを追加する必要があります。

しかし、CSPを有効にすることのポイントは、インラインスクリプトを許可しないことです。

質問
この問題を解決する方法はありますか?

アップデート1
ウィジェットのみunsafe-inlineを追加することなく、IE 11で動作します。クロムとIEエッジウィジェットではunsafe-inlineが必要です。

答えて

0

これで問題が解決するかどうかはわかりませんが、アプリケーションではDeferring機能が使用されていますが、その他の理由で使用されています。私たちの理由は、すべてのスクリプト(特にjquery.js)をページの最後にロードするということです。しかし、副作用は、jQueryスクリプト呼び出しがもうページにレンダリングされないということです。 @Html.Kendo().DeferredScripts()を実行することで、すべてのスクリプトを生成する場所を制御することができます(ただし、上のドキュメントでさらに役立つでしょう)。とにかく、おそらくCSPのコンテキストでは、たとえそのページの最後にある<script>ブロックがまだ「インライン」とみなされています。しかし、試してみてください。

+1

感謝を使用する場合unsafe-inlineを追加する必要はありません考えています。スクリプトがビューに保持されているので、私はここには投稿が見つかりませんでした。 http://stackoverflow.com/questions/39125743/how-can-i-get-kendoui-mvc-to-work-with-content-security-policyしかし、私たちはスクリプトタグの中で一度に異なるスクリプトを書くことができ、 'nonce 'on script tag on CSP。 – LP13

0

ソリューションは、以下の

1>は、それぞれの剣道ウィジェットのDeferredメソッドを追加します(私はまだ試していませんが)うまくいくかもしれません。底部で、剣道制御を使用して、各ビューのよう

@(Html.Kendo().DatePicker().Name("BeginDate").Deferred()) 

2>asp-add-nonceがasp.coreからボックスの外ではないことをスクリプトタグ

<script asp-add-nonce="true"> 
     @Html.Kendo().DeferredScripts(false) 
    </script> 

メモを追加。 Joonasw.AspNetCore.SecurityHeadersナゲットライブラリをインストールする必要があります。私はthis articleを見つけました。これは、.netコアアプリケーション用にCSPを構成する方法と、各要求ごとに新しいnonceを生成する方法を示しています。

3>要求ごとに異なるnonce値が必要であるため、web.configでCSPポリシーを設定しないでください。代わりに、この記事で説明したJoonasw.AspNetCore.SecurityHeadersミドルウェアを使用してCSPポリシーを設定してください。

4>私は、我々はランダムnonce(あなたが古いブラウザへのターゲティングされていない限り)

関連する問題