MVC を使用したフォームと同様に、Web API 内で悪意のある入力を検証する組み込みのサポートはありますか?
そうでない場合、「グローバル」フィルター/メッセージインペクター/悪意のある入力に対して検証するものを誰かが提案できますか? すべてのモデル/パラメーターを個別に検証することを避けようとしています...
MVC を使用したフォームと同様に、Web API 内で悪意のある入力を検証する組み込みのサポートはありますか?
そうでない場合、「グローバル」フィルター/メッセージインペクター/悪意のある入力に対して検証するものを誰かが提案できますか? すべてのモデル/パラメーターを個別に検証することを避けようとしています...
いいえ、そのようなサポートがあるとは思いません。理由は次のとおりです。Web フォーム/MVC による入力検証のサポートは、応急処置でした。しかし、出力をエンコードすることは、より優れた XSS 修正です。どの入力が「悪い」かは、どのように出力するか (HTML 要素ソースの一部として、JS ソースの一部として、HTML 属性値で、SQL クエリの一部として) に依存するため、入力の検証は完全には機能しません。など)。
したがって、XSS の問題に対する解決策として、一般的なグローバルな入力検証をお勧めしません。代わりに、入力を出力する (または SQL DB などの別のレイヤーに渡す) 前に、入力を常に正しくエンコードしていることを確認してください。出力については、データを返すために通常の Web API メカニズム (コンテンツ ネゴシエーション/フォーマッターを備えたモデル クラス) を使用している場合、フォーマッターはコンテンツ タイプ固有のエンコーディングを処理する必要があります。
XSS は ASP.NET Web API には関係ないと思います。私がそう思う理由はここにあります。リクエスト本文で、このような JSON を取得する"input": "<script>alert('hello');</script>"
とします。Web API は、いくつかのプロパティにバインドされている「入力」をそのままデータベースに保存し、後続の GET リクエストでそのまま取得して送信します。クライアントにとって、それはまだ大丈夫です。このデータが正しくエスケープされるようにするのは、クライアントの責任です。したがって、この入力プロパティが Web アプリケーションとしてシリアル化される場合、ブラウザーに書き込む前に、クライアント Web アプリは HTML エンコードする必要があります。これを行う Web API は一般に意味がありません。Web API は他のクライアント (XSS が適用されない可能性がある WPF アプリケーションなど) によって消費される可能性があるためです。または、あなたが念頭に置いている特定のケースを見逃していますか?
なぜあなたは使わないのHttpUtility.HtmlEncode
ですか?
入力は常に検証する必要があります。どこに行くかは問題ではありません。名前フィールドは、jpeg ファイルではなく、たとえば環境によっては SQL 攻撃ではなく、名前文字列を返す必要があります。