ASP.NETでの入力検証のベストプラクティス?
-
02-10-2019 - |
質問
入力検証の一般的な慣行は何ですか?言い換えれば、クライアント側、サーバー側、または両側の入力検証を確認しますか?
また、パフォーマンスが私にとって重要である場合、セキュリティリスクを提示することなく、クライアント側の入力検証だけで十分でしょうか?
解決
少なくともサーバー側の検証を常に実行します。ユーザーエクスペリエンスを向上させたい場合は、クライアントサイドの検証がいいかもしれません。また、サーバーへの不必要な要求を回避することもできます。
クライアント側の検証のみで十分ではなく、たとえばJavaScriptを無効にすることで簡単にバイパスできます。
サーバー側の検証を追加することから、常に開始することをお勧めします。テストしたら、クライアントサイドの検証を有効にすることができます。
他のヒント
クライアント側の検証に依存しないでください!!!
正直なユーザーのためだけにあります。不正なユーザーはすぐにそれを回避できます。
JavaScriptをシャットオフした場合、アプリをたわごとにハンマーできます。常にサーバーサイドの検証を入れてください...それはそれほど難しくありません
Webフォーム
''# VB
If Page.isValid Then
''# submit your data
End If
// C#
if(Page.isValid) {
// submit your data
}
MVC
''# VB
If ModelState.IsValid Then
''# submit your data
End If
// C#
if(ModelState.IsValid) {
// submit your data
}
サーバー側の検証が機能したら、先に進み、クライアント側の検証を追加します。ユーザーにとってエクスペリエンスが向上します
私がお勧めすることの1つは、使用することです 流validation, xval と jquery 一緒にクライアントとサーバー側の検証を実行します 同じルールに基づいています.
流validation サーバー側の.NETオブジェクトを検証するルールベースのフレームワークです。ルールプロバイダーが付属しています xval, 、これは、サーバー側とクライアント側の検証フレームワークの選択をリンクできる別のフレームワークです。クライアント側でjQueryバリデーターの生成をサポートします
一般的に両側。クライアント側は、意図的にまたは無邪気に(noscriptの普及がある場合)簡単にバイパスできますが、ユーザビリティの理由で持つ価値があります。
セキュリティリスクを提示するかどうか。ユーザー入力は何を使用していますか?また、検証の現在の性質は何ですか?
誰かがフォームで必須のフィールドに記入したことをチェックしているだけなら、おそらくセキュリティリスクがあるとは考えにくいでしょう。
Clie側の検証を非常に簡単にバイパスできるため、サーバー側の検証を使用している場合は使用する必要があります。
BTTERユーザーの説明が必要な場合は、クライアント側の検証も使用してください。また、無効なフォームがサーバーに送信されないため、サーバーへのHTTP要求の数を減らすため、パフォーマンスも向上します。
最も一般的なのは、クライアント側とサーバー側の両方の検証を使用することです。
セキュリティリスクを提示することなく、クライアント側の入力検証のみが私のウェブサイトに十分であるでしょうか?
いいえ、サーバー側の検証も使用する必要があります。 (たとえば)Firebugでクライアントの検証を削除するのは非常に簡単です。明らかに、クライアントサイドの検証を削除した後、Evildoerは任意のデータをサーバーに送信できます。そのため、サーバー側の検証も強く必要です。