2017-09-14 3 views
2

は、私は特定の(ビジネスロジック)であることをデータベース上で、サーバ側上でトランザクションを実行する必要があります。サーバー側(コントローラ)で検証を行うことをお勧めしますか? <strong>クライアント側</strong>(ブラウザ)からの入力を持つASP.NET MVC

トランザクションを行う前にユーザー入力の検証を行うことをお勧めしますか? 「一元責任原則」に違反していますか?

編集:独責の原則 - 私の悪い、ここでは意味がありません。

よろしくお願いいたします。

+1

あなたの質問の最初のルールである必要があり、その危険な意見ベースの質問に近く、ところではい、それは良い習慣だ、クライアントを信頼していません。それはもう一つの概念ですが、話題にはありません – InferOn

+4

それは単なる良い練習ではなく、その本質的なものです。クライアント側の検証に合格すれば簡単にできます(クライアント側の検証は素晴らしいボーナスとして考慮する必要があります) –

答えて

6

入力がクライアント側でチェックされている可能性があるという事実にもかかわらず、サーバー側での検証を行うことが必要不可欠であるいくつかの理由があります。

  • が異なるクライアントがあるかもしれませんMVCアプリケーションと話す - 一度認証されると、HTTPリクエストを送信して応答を処理できる人は誰でもバックエンドに話すことができます。検証をスキップしたり、悪意のあるデータを悪用してコードを書き込んだりする可能性があります。あなたのサーバー側は準備が整っていなければなりません。
  • クライアントコードにバグがある可能性があります。最終的には、データの一貫性を担うサーバー側のコードです。
  • チェックの時刻は重要です - システムの状態は、リクエストがサーバーに到達するまでに変更されることがあります。従来の例では、検証がクライアント上で実行された時点で100ドルを引き落としても問題ありませんが、リクエストがサーバーに到達するまでに他のユーザーが既にアカウントから資金を引き出している可能性があります。

これは、クライアント側とサーバー側の検証が異なる目的を果たすため、単一責任の原則に違反しません。クライアント側の検証は、有効なものと無効なものをユーザーに視覚的に示すプロンプトとして機能し、サーバー側の検証はデータの一貫性を保ちます。

2

をトランザクションにする前に、ユーザー入力の検証を行うことをお勧めしますか?

はい。

男があなたのドアに来て、彼らが女王だと言うなら、彼を連れてきますか?

同様に、クライアント(ブラウザ)から送信されたデータは信頼できないため、サーバー側を検証する必要があります。

1

クライアント側の検証は、JavaScriptを無効にするか、またはフィドラーやカールのようなツールを使用して渡すことができるため、サーバー側の検証を行うことが重要です。一方、ユーザーフレンドリーなアプリケーションクライアント側検証は使用するための重要なツールになります。

Jquery validationは、クライアント側の検証

MVC Model Validationのためのフロントエンドライブラリは

Remote Attributeは、私が思うあなたのケースを見てみましょうするために有用な属性であり、両方のクライアント側とサーバー側の検証を生成することができます。

関連する問題