1

AntiForgeryToken を使用すると、POST アクション メソッドの承認規則がカバーされます。新しい注文を作成するための次の Create.cshtml ビューがあります。

@using (Html.BeginForm()) {
    @Html.AntiForgeryToken()
    @Html.ValidationSummary()

    <fieldset>
        <legend>Create New Order</legend>
        <ol>
            <li>
                @Html.LabelFor(m => m.OrderName)
                @Html.TextBoxFor(m => m.OrderName)
            </li>
            <li>
                @Html.LabelFor(m => m.OrderType)
                @Html.TextBoxFor (m => m. OrderType)
            </li>
            <li>
                @Html.LabelFor(m => m.OrderDate)
                @Html.TextBoxFor(m => m. OrderDate)
            </li>
        </ol>
        <input type="submit" value="Create" />
    </fieldset>
}

上記のビューは、次の GET アクション メソッドを呼び出すとレンダリングされます:-

[Authorize (Roles="customerservice")]
        public ActionResult Create()
        {
            return View("Create");
        }

POST アクション メソッドは次のとおりです。

     //
        // POST: /Create

        [HttpPost]

        [ValidateAntiForgeryToken]
[Authorize (Roles="customerservice")]
        public ActionResult Create(Order r)
        {

            // Code goes here
            return View(model);
        }

今私の質問は次のとおりです: -

  1. 私は自分のビューで Antiforgery トークンを使用しているので、「POST:/Create」への有効な呼び出しが行われることを保証します。アプリケーション自体から + ユーザーが Create ビュー内にいる場合、つまりユーザーが customerservice ロールの下にあることを意味します。

  2. これは、POST Create アクション メソッドから承認された属性を削除しても、まだ安全であることを意味するのでしょうか? アプリケーションが「POST: Create」リクエストを受信した場合、これは、ユーザーが「Get: /Create」アクション メソッドからすでに承認されており、リクエストが Create ビューから送信されたことを意味します。上記の質問についてのコメント。よろしくお願いします

4

1 に答える 1

1

AntiForgeryToken次の 3 つの項目から構成されます。

  • アクションの属性
  • ビュー内のヘルパー メソッド
  • クッキー

AntiForgeryTokenリクエストごとに一意ではないため、ユーザーがログに記録されていない場合、これは潜在的なリスクです。

于 2012-11-11T14:18:00.993 に答える