web-dev-qa-db-ja.com

クライアント側のバリデーターでサーバーの検証は必要ですか?

最近、1ページで200を超えるカスタムバリデーターを使用する.net Webアプリを作成しました。私はClientValidationFunctionOnServerValidateの両方のコードを書きましたが、その結果、大量の反復コードが発生しました。

私のsqlステートメントはパラメーター化されています。入力フィールドからデータをプルし、sqlステートメントまたはストアドプロシージャに渡す前にそれらを検証する関数があります。また、JavaScriptは、ページが送信される前にフィールドを検証します。したがって、基本的に、データはOnServerValidateに到達する前でもクリーンで有効であり、前述の手順により、いずれにしてもクリーンになります。

これは私に質問をします、クライアント側で検証するときにOnServerValidateは本当に必要ですか?

編集:

私のOnServerValidatesは、スキップパターンが適用されることや、テキストにショートが表示されることを確認するなどの簡単なことを行います(これは、テキストフィールドからパラメーターにデータをプルするコード(つまりGetShort())で強制されます)。そして、これらは患者調査に配置されており、ほとんどの場合、スタッフが記入します。

したがって、これらの基本的なチェックのためのOnServerValidateがなく、クライアント側だけの場合は、次のような状況になります。

  1. ユーザーはJavaScriptをオフにしてフォームを送信できません。これは、ボタンがポストバック用にJavaScriptで駆動されるためです。
  2. ユーザーが投稿を強制します。これが発生した場合、私のOnServerValidateはスキップパターンを見ているだけなので、彼らがやろうとしていることを何でも止めるためにジャックを実行しますか?

状況2は、私が迷ってしまうところです。投稿を強制しているユーザーがこれらの単純なOnServerValidatesに捕まる可能性が高いようです

6
peroija

クライアントがブラウザでJavaScriptを許可することを決定できるため、これらは必要です。また、あなたのソフトウェアを壊したい人も考慮に入れるべきです。フロントエンドを使用せずに、投稿を作成してWebサイトに送信できるツールはたくさんあります。

クライアント側の検証はユーザーにとっていいことですが、サーバーは送信されたデータを決して信頼すべきではありません。

- 更新 -

編集内容を正しく読んでいる場合、OnServerValidatesが既にサーバーに存在する検証機能を複製しているようです。その場合は、OnServerValidatesは必要ありません。

さらに、ユーザーがサービスへの投稿を作成した場合、OnServerValidatesはトリガーされないため、現在サーバー上にあるそのタイプの検証を維持することをお勧めします。

16
Brian Dishaw

検証をスキップする場合は、サーバーよりもクライアントで実行する可能性がはるかに高くなります。

どこかでスキップする場合の問題は、検証が行われていないときに誰かがセキュリティホールを開いてしまう可能性があることです。

3
Satanicpuppy