2016-10-28 20 views
0

MVCプロジェクトで使用されているWeb APIプロジェクトがあります。 MVCプロジェクトにはかなりの量のユーザー入力があり、Webページに出力として表示されます。C#のXSS攻撃防御

ここでは、XSS攻撃から自分のサイトを保護したいと考えています。私はMicrosoftのAntiXssライブラリ、入力検証、出力フィルタリングなどについて読んだことがあるが、私の質問は、これを私のプロジェクトにどのように適用するのかです。入力バリデーションの場所、出力のフィルタリング方法、ユーザーデータのサニタイズ方法、APIにデータをサニタイズする必要がありますか、APIに送信する前にMVCだけでサニタイズする必要がありますか? MVCまたはWeb APIでAntiXssライブラリを使用する方法など

答えて

1

答えは、ユーザー入力がブラウザのページDOMにどのように正確に反映されるかによって異なります。

MVCアプリケーションが(Razorを使用して)cshtmlページを生成する場合は、そこでの出力エンコードをcshtmlファイルに実装する必要があります。別のライブラリとしてのAntiXSSは廃止されました。デフォルトではSystem.Web.Security.AntiXss名前空間になっています。すべての出力を書き込むコンテキストに従ってエンコードする必要があります(最も重要なのは、JavaScriptのコンテキストで記述された入力をエンコードする必要があります。scriptタグ、onclickのようなイベント属性、hrefの最初の文字aタグの場合など)。プレーンhtml出力(タグ間のテキスト)の場合、RazorはデフォルトでHTMLエンコーディングを提供していますので、<div>@myVar</div>を実行しても問題ありません。

フロントエンドがJSON APIのようなものを消費する場合は、おそらく何らかの種類のクライアントサイドテンプレートエンジン(Knockoutなど)があります。その場合、ユーザーから受け取ったデータをapplication/jsonのコンテンツタイプでクライアントに送り返すことはかなり安全です(これは実際には非常に重要です)。次に、バインドメソッドを慎重に選択して、ユーザー入力を常にHTMLとしてではなくテキストとしてバインドする必要があります。これは事実上

はXSS防止に関する完全なチュートリアルでは、道長くここに答えよりなることに注意してくださいなど、ノックアウトのtextを使用してhtmlのではなく、結合または.html()の代わりにjQueryの.text()メソッドを使用してのようなものを意味するので、この答えは唯一のハイライトいくつかの高水準のものと、これがXSSを防ぐために行われるべき一般的な方法です。

+0

API側で何もする必要はありませんか? – NoviceCoder

+0

XSS防止のためではありません。 APIはデータをどのように表示するか(選択するエンコーディング)とは関係がないため、データを保存する前にエンコードする必要はありません。 [この質問](http://stackoverflow.com/questions/39778598/sql-preventation-of-xss/39780376)への私の答えを見てください。あなたはあなたのAPI上で入力バリデーションを実装することができます。あなたはそれをより良くすることができます。しかし、XSSは出力の問題であり、入力側では停止できません。まだ入力の妥当性確認は良い習慣であり、XSSだけでなく、あらゆる種類の注射に役立ちます。 –