使用AntiForgeryToken将足以覆盖POST操作方法中的授权规则

时间:2012-11-11 13:12:56

标签: asp.net-mvc asp.net-mvc-3

使用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视图发送的? 关于上述问题的任何评论。 最诚挚的问候

1 个答案:

答案 0 :(得分:1)

AntiForgeryToken由三个项目组成:

  • 行动属性
  • 视图中的帮助方法
  • 曲奇

AntiForgeryToken对于每个请求都不是唯一的,因此如果用户未被记录,则存在潜在风险。