1

データ入力フォームに MVC を使用しており、次の div があります。

<div>
      <label>Bar Code:</label>
      @if (Model.GiftCardId == default(int))
      {
        @Html.TextBoxFor(model => model.BarCode)
      }
      else
      { 
        @Html.TextBoxFor(model => model.BarCode, new { @readonly="readonly"})
      }
</div>

ここでは、ユーザーが新しいギフト カードを入力する場合、編集可能な入力が表示され、ユーザーが新しいバーコードを入力できるようにしています。ただし、ユーザーが既存のギフト カードを編集している場合、入力は読み取り専用の入力として表示される必要があります。私の質問は、ユーザーが barCode 入力の readonly 属性を変更して、別の属性を入力できるようにすることはできますか? BarCode フィールドはテーブルの主キーではありませんが、一意である必要があります。GiftCardId フィールドを使用してレコードを識別します。では、ユーザーがフォームを送信するときに GiftCardId も変更できないようにするにはどうすればよいでしょうか? これはどのように制御できますか?

4

2 に答える 2

2

これはセキュリティ関連の質問であると理解しています。ユーザーがフォームをハッキングして、意図しない何かを行うことができます。

答えはイエスです。ユーザーは Firebug などのツールを使用してマークアップを妨害し、それによって readonly 属性を変更できます。

GiftCardId がユーザーからどのように収集されるかを示していません。以前のビュー/アクション メソッドで収集および検証されていると仮定すると、より安全なアプローチは、GiftCardId が有効/新規かどうかに応じて別のビューにリダイレクトすることです。

コメントの後に編集

いくつかの提案。

  • GiftCardId をブラウザに送信するのではなく、セッション状態で保存します。
  • 一方向ハッシュ関数を使用して GiftCardId からトークンを生成し、非表示フィールドでブラウザーに送信します。ポストバックされた GiftCardId を再ハッシュし、元のハッシュと一致することを確認します。MD5 ハッシュの作成に関するこの短い記事を参照してください。
于 2012-12-02T10:33:02.950 に答える
0

簡単な答えは「はい」です。すべてのリクエストは偽造される可能性があります。そのため、ユーザー入力を信頼せず、サーバー側でユーザー入力を検証しないでください。

実際にできることは、何が必要か、および GiftCardId が変更されたことの影響によって異なります。サーバー側の検証に加えてできること、

1. hide the field instead of making it visible
2. encrypt the GiftCardId
于 2012-12-03T07:57:35.177 に答える