使用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视图发送的? 关于上述问题的任何评论。 最诚挚的问候
答案 0 :(得分:1)
AntiForgeryToken
由三个项目组成:
AntiForgeryToken
对于每个请求都不是唯一的,因此如果用户未被记录,则存在潜在风险。