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);
}
今私の質問は次のとおりです: -
私は自分のビューで Antiforgery トークンを使用しているので、「POST:/Create」への有効な呼び出しが行われることを保証します。アプリケーション自体から + ユーザーが Create ビュー内にいる場合、つまりユーザーが customerservice ロールの下にあることを意味します。
これは、POST Create アクション メソッドから承認された属性を削除しても、まだ安全であることを意味するのでしょうか? アプリケーションが「POST: Create」リクエストを受信した場合、これは、ユーザーが「Get: /Create」アクション メソッドからすでに承認されており、リクエストが Create ビューから送信されたことを意味します。上記の質問についてのコメント。よろしくお願いします