javascript - 入力チェック - バリデーション クライアント サーバ




JavaScript:クライアント側とサーバー側の検証 (8)

JavaScriptは実行時に変更できます。

私は、サーバー上で検証構造を作成し、これをクライアントと共有するパターンを提案します。

たとえば、両端に別々の検証ロジックが必要です。

inputs側の"required"属性クライアント側

field.length > 0サーバー側。

しかし、同じ検証仕様を使用すると、両端でミラーリング検証の冗長性(および間違い)がなくなります。

クライアント側またはサーバー側の検証を行う方がよいでしょうか?

私たちの状況では、

  • jQueryとMVC。
  • JSONデータをViewとControllerの間で渡します。

私が行う検証の多くは、ユーザーがデータを入力する際に​​データを検証することです。 たとえば、私はkeypressイベントを使用してテキストボックス内の文字を防ぎ、最大文字数を設定し、範囲内の数値を設定します。

私はより良い質問があると思う、クライアント側よりもサーバー側の検証を行うことに利点はありますか?

恐ろしい、誰もが答えます。 私たちが持っているウェブサイトは、パスワードで保護されており、小規模なユーザーベース(<50)です。 JavaScriptを実行していない場合は、忍者を送信します。 しかし、私たちが誰のためにサイトを設計していたとしても、両者の検証を行うことに同意します。


常にサーバー上で検証する必要あります。

また、クライアント上で検証することはユーザーにはいいですが、まったく安全ではありません。


はい、クライアント側の検証は完全にバイパスすることができます。 より良いユーザーエクスペリエンスを提供するためにクライアント側と、クライアントが実際に検証しただけでなく、実際に入力が得られることを確認するサーバー側の両方を行う必要があります。


まあ、私はまだ答える余地があると思っています。

RobとNathanの回答に加えて、クライアント側の検証が重要であると付け加えます。 あなたのウェブフォームにバリデーションを適用するときは、以下のガイドラインに従わなければなりません:

クライアント側

  1. ウェブサイトの正規のユーザーからの本物のリクエストをフィルタするために、クライアント側の検証を使用する必要があります。
  2. サーバー側の処理中に発生する可能性のあるエラーを減らすには、クライアント側の検証を使用する必要があります。
  3. サーバー側のラウンドトリップを最小限に抑えるために、クライアント側の検証を使用して、帯域幅とユーザーあたりの要求を節約する必要があります。

サーバ側

  1. あなたは、クライアント側で正常に行われた検証が100%完璧であると想定してはいけません。 50人以下のユーザーでも問題ありません。 あなたはあなたのユーザー/エプレーピーのどちらが「悪」に変わったのかを知りませんし、適切な検証をしていないことを知っています。
  2. たとえ電子メールアドレス、電話番号の検証、または有効な入力のチェックの面で完璧であっても、それは非常に有害なデータを含んでいる可能性があります。 サーバー側でフィルタリングする必要があるのは、それが正しいかどうかにかかわらずです。
  3. クライアント側の検証がバイパスされている場合、サーバー側の検証では、サーバー側の処理の潜在的な害から救済されます。 最近、私たちはすでに、SQLインジェクションやいくつかの悪いメリットを得るために適用されるかもしれない他の種類のテクニックの話をたくさん聞いてきました。

どちらのタイプの検証も、それぞれの有効範囲で重要な役割を果たしますが、最も強力なのはサーバー側です。 1つの時点で10kユーザーを受け取った場合、Webサーバーに送信される要求の数をフィルタリングすることになります。 無効な電子メールアドレスのような間違いが1つ見つかった場合は、再度フォームをポストバックして、サーバーリソースと帯域幅を確実に奪うユーザーに修正を依頼します。 だから、あなたはJavaScriptの検証を適用する方が良い。 JavaScriptが無効になっているとサーバー側の検証が救済され、99.99%のWebサイトがjavascriptを使用していて、既定ですべての最新のブラウザで有効になっているため、


クライアント側の検証よりもサーバー側の検証を行う利点は、クライアント側の検証をバイパス/操作できることです。

  • エンドユーザーはJavaScriptをオフにできます
  • あなたのサイトを使っていない人がサーバーに直接データを送ることができます
  • ページ上のJavascriptエラー(何らかの原因による)によって、すべてではなく一部の検証が実行される可能性があります

つまり、常にサーバー側を検証し、クライアント側の検証をエンドユーザーエクスペリエンスを向上させるための追加の「余分なもの」と考えてください。


サーバー側の検証を行い、各フィールドの検証結果を含むJSONオブジェクトを返信し、クライアントJavascriptを最小限に保ち(結果を表示するだけで)、クライアントとサーバーの両方で繰り返しなくてもユーザーフレンドリーなエクスペリエンスを維持できます。


照合を軽視している場合は、クライアントで行うのが最善です。 これにより、サーバーのパフォーマンスを向上させるネットワークトラフィックが節約されます。 パスワードのようなデータベースや何かからデータを引き出す検証が複雑な場合は、データを安全にチェックできるサーバーで行うのが最善です。


私は、全体的、系統的、ランダムなエラーを区別する興味深いリンクに出くわしました

Client-Side validation 、グロスとランダムなエラーを防ぐために完全に適しています。 テクスチャと入力の最大長。 サーバー側の検証ルールを模倣しないでください。 独自の大雑把なルールルールを提供します(クライアント側では200文字、強いビジネスルールではサーバー側でn )。

Server-side validation 、系統的なエラーを防ぐために完全Server-side validationます。 ビジネスルールを適用します。

私が関与しているプロジェクトでは、検証はajaxリクエストを通じてサーバー上で行われます。 クライアント上で私はそれに応じてエラーメッセージを表示します。

さらに読む:全体的、系統的、ランダムなエラー:

https://answers.yahoo.com/question/index?qid=20080918203131AAEt6GO





validation