検証サーバーの制御は、JavaScriptよりも優れていますか?私たちは彼らによって提供される機能しか使用できないので、彼らは私たちを制限しますか?これについて私を助けてください。自分のブログで検証サーバーのコントロールについて読んだ
4 に答える
クライアントとサーバーの両方で検証を使用するのが最善です。
- クライアントで検証すると、サーバーへの定期的なラウンドトリップなしで即座にフィードバックが得られます。これにより、ユーザーエクスペリエンスが向上します。
- 不正なデータを取得しないようにするには、サーバーでの検証が必要です。結局のところ、悪意のあるユーザーは、クライアント側の検証を行わなくても、サーバーにデータを簡単に投稿する可能性があります。
さて、その検証をどのように実装するかについては、組み込みの「ツールキット」コントロールが適切な検証を実行する場合、独自の検証コードを作成するよりも明らかに簡単になります。ASP.NETバリデーターは、クライアント側とサーバー側の両方の検証を行います。のドキュメントからBaseValidator
:
検証コントロールは、サーバー上の関連する入力コントロールを常に検証します。検証コントロールには、スクリプト対応のブラウザー(Microsoft Internet Explorerバージョン4.0以降など)がクライアントで検証を実行できるようにする、完全なクライアント側の実装もあります。クライアント側の検証は、サーバーに送信される前にユーザー入力をチェックすることにより、検証プロセスを強化します。これにより、フォームが送信される前にクライアントでエラーを検出できるため、サーバー側の検証に必要な情報のラウンドトリップを回避できます。
一般に、サーバー側のデータ評価は常に行う必要があります。これにより、悪意を持って偽造されたリクエストからサーバーを保護し、データストアが無効なデータを入力しないようにします(データベースがそれ自体を処理しない限り)。リンクされた記事で説明されているように、サーバー側の入力検証にツールまたはフレームワークを使用する場合は、それはあなた次第です。
たとえばjavascriptを使用したクライアント側の検証も便利ですが、別の理由で、データを送信する前にユーザーに役立つ情報を提供できます。
したがって、それはどちらか、または、より多くの、および/の問題ではありません。ここでは実際には二重の作業を行っていません。クライアント側とサーバー側の検証は、単に異なる目的を果たします(それぞれ、ユーザーの使いやすさを向上させ、サービスのロジックとセキュリティを保護します)。
サーバー側とクライアント側の検証が同じビジネスロジックによって管理されている可能性があります(たとえば、郵便番号の場合、同じregexを使用して、サーバー側とクライアント側の両方で入力を確認および拒否できます)。この場合、両方の検証レイヤーを同期するという課題があります(これは、サーバー側のサービスコードと同じビジネスロジックモデルからページ+ JavaScriptロジックを生成することで実行できます)。
それでも二重の作業を行っていると感じる場合は、サーバー側の検証を行うことを選択してください。(もちろん、これを使用してクライアントに通知することもできますが、応答が必要です。)クライアントは要求を手動で偽造するか、ブラウザーから無効にすることができるため、クライアント側の検証では保護が提供されません。 javascript、またはgreasemonkeyスクリプトのようなものを介してクライアント側のjavascriptを変更します。
ユーザーはJavaScriptをオフにすることができます。その場合、検証ルーチンは機能しなくなります。フロントエンドとサーバーの両方で検証を行うのが法律で最善です。
私はASPに取り組んだことはありませんが、私が推測していることから、ValidationServerControlsは、サーバー側の検証とクライアント側の検証を提供する、すぐに使用できるコントロールです。(私は間違っているかもしれません)。しかし、私が理解していることから、コンポーネントのサーバー側の検証は常に必要です。javascriptに検証を入れるだけでは決して十分ではありません。クライアントはいつでもJavaScriptを無効にしてコンテンツを送信したり、curlなどの高度なツールを使用してデータを含む可能性のあるサーバーにリクエストを送信したりできます。それはあなたのコード/SQLにインジェクションをするかもしれません。
javascriptの検証を書いたとしても; 何らかの方法で、受信データを検証するために常にサーバーコードを作成する必要があります。
理想的なアプローチは、両方を持つことです。1.javascriptでデータを検証します。データ入力が無効な場合にサーバーへのリクエストが制限されるようにします。2.サーバー側の検証。javascriptが無効になっていて、サーバーにデータが投稿された場合。