2011-07-23 9 views
1

ASP.NET MVCでのユーザー入力の検証/クリーニングに関するベストプラクティスに関する提案があります。 ValidateInputはMVCフレームワーク内から処理できないため、ほとんどの場合Falseに設定する必要があります(アクションメソッドが起動する前でもエラーがスローされているようです)。ASP.NET MVCでの入力の検証

したがって、入力が悪意のある入力に対してどのように検証されるべきですか。 タグなどの入力を許可したいだけで、入力やその他の入力を禁止するのはどうでしょうか?これはかなり一般的な要件でなければなりません今Webアプリケーションのが、私はこれを自動化するASP.NET MVCで多くを見ることができません。

答えて

2

、どのように入力が悪意のある入力のために検証する必要があります。\

それは何に依存しますあなたのアプリケーションはこの入力をしています。たとえば、リレーショナルデータベースに格納する場合は、パラメータ化されたクエリを使用し、ユーザー要求を適切にエンコードする限り、リレーショナルデータベース指定された列に例えばalert('foo');のような格納を気にしないでください。問題が発生する場合は、このデータベースに格納されている結果を取得して、一部のビューに表示しようとするときです。その時点で、結果が適切にHTMLエンコードされていることを確認する必要があります。

たとえば、データストアに過度に危険な文字列を格納し、それをビューに表示するとします。あなたは、単に希望かみそりビューエンジン使用していた場合:

@Html.DisplayFor(x => x.SomeProperty) 

あなたはドンように適切にHTML SomePropertyの値を符号化するの世話をします; tは心配する必要があります。

そして、あなたはWebフォームを使用していた場合は表示エンジン:

  • は常に使用:だから

    <%= Html.DisplayFor(x => x.SomeProperty) %> 
    

    、あなたがユーザーの入力には注意する必要があります2つの重要な瞬間がある見ることができるようにこのユーザー入力をリレーショナルデータベースに格納する場合は、パラメータ化されたクエリ

  • いつでも、HTMLビューでレンダリングするときに保存した値をエンコードします。
+0

はい、わかりました。しかし、潜在的に有害なデータベースへの入力を許可することは良い考えではありません。 UIが変更されたときの道のりを誤ってRawに出力することはできません。確かに、最初に危険な入力を許可することは許されません。 また、そのような入力が単純​​に入力され、アラート( 'foo')が出力テキストとして表示された場合、Webではうまく見えません。 – Judo

+3

@柔道、私はあなたに同意しない。ユーザー入力をそのままデータベースに格納するだけです。リレーショナルデータベースは、適切に保管する限り、有害な入力を気にしません。あなたが解決しようとしているよりも多くの問題に遭遇するように、データベースに格納する前にユーザー入力を修正し始めたら、私を信じてください。あなたが私の答えで提供した2つの基本的なルールに従えば、あなたは安全です。 –

+1

@Judo - もう一つ考慮すべきことは、毎年ポップアップするJavaScriptの脆弱性が無限に供給されていることを確認することは非常に難しいことです。あなたは基本的に敗戦戦いになるでしょう。単にかみそりか<%;あなたがこれらの問題のいずれかを持たないことを保証し、努力の面ではるかに安いです。 – jfar