3

私の最近の MVC3 プロジェクトは、私の講師によってハッキングされました。彼は、数週間後にクラスでプレゼンテーションを行うまで、彼がどのようにそれを行ったかを正確に教えてくれません。しかし、私はこれを長く待つことはできません。

私の質問は、ビューからコントローラーの POST メソッドに送信されるデータを傍受する方法はありますか? もしそうなら、この方法は何と呼ばれており、どうすればそれを止めることができますか?

例えば:

User オブジェクトをデータベースにポストする登録ページ。ユーザー オブジェクトには、自動で false に設定されるブール値の管理者がいます。ハッカーが Post を傍受し、Users Admin 属性の値を true に変更します。

どんな助けでも素晴らしいでしょう。

4

2 に答える 2

5

コントローラー (または任意の HTTP ハンドラー) に対して行われた要求について、特別なことや保護されていることは何もありません。これは、自由に変更できる名前と値のペアの単なる文字列です。Request.FormVisual Studio デバッガーの即時ウィンドウを見てください。

Firefox Tamper Dataプラグインなどのツールを使用して、フォーム データを改ざんできます。ツールを使用しなくても、数行のコードを使用して簡単に変更できます。そのために Web ブラウザは必要ありません。

私の推測では、あなたの講師は単に POST を からIsAdmin=falseに変更しただけです。IsAdmin=true

では、どうすればこれを防ぐことができるでしょうか。

  • すべての入力を検証します。POST/ビュー モデルは、IsAdmin=true と表示されますか? オーケー、発信者はその割り当てを行う権利を持っていますか?

  • 変更したくないプロパティを公開しないビュー モデルを作成します。プロパティがページに表示されていなくても、リクエスト内にある場合は ModelBinder によってバインドされます。これは、ページにチェックボックスを配置しなくてもIsAdmin、ビュー モデルに IsAdmin プロパティが含まれている場合に設定できることを意味します。

  • モデルのプロパティをバインド不可として選択的にマークできますが、通常はお勧めしません。忘れがちです。

参照: ASP.NET MVC - [Bind(Exclude = "Id")] の代替

于 2013-02-05T16:52:17.217 に答える
0

アーロンが言ったこと。何も信頼できません。すべてをチェックする必要があります。「管理者」の唯一の決定要因が渡されたブール値である場合、データの更新/チェック時にデータベースでダブルチェックできるトークンや何かなど、より多くのセキュリティが必要になります。

于 2013-02-05T16:39:27.237 に答える