检测隐藏的表单字段是否已更改?

时间:2011-09-27 08:03:08

标签: .net asp.net-mvc-3 security hidden-field

我正在使用隐藏的表单字段来存储用户正在编辑的当前记录。如何阻止用户更改该字段? MVC3的防伪助手会起作用吗,还是我需要自己检查?

4 个答案:

答案 0 :(得分:0)

请参阅How to detect if form field has changed without using hidden field

建议使用散列并在回发时进行比较以检查是否已进行更改。

答案 1 :(得分:0)

修改

似乎我误解了你的问题,对不起。 事实上,AntiForgeryToken不会帮助你防止这种情况发生。 您可以在模型中存储这些不可编辑的信息(在我的示例中为Account类),而不会将其暴露在会话中。您还可以在模型的属性中添加一些检查/事件提升,以检测不需要的版本。

旧misunterstood应答

您可以使用HtmlHelper方法HtmlHelper.AntiForgeryToken

1 /在你的表格中:

@using (Html.BeginForm("Edit", "User", FormMethod.Post))
{
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Account</legend>
        <div class="editor-label">
            @Html.LabelFor(model => model.FirstName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.FirstName)
            @Html.ValidationMessageFor(model => model.FirstName)
        </div>

        //Your other fields

        <p>
            @Html.AntiForgeryToken()
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}

2 /在你的邮政行动方法中:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(Models.Account account)

请注意,AntiForgeryToken仅适用于POST请求,并且(显然)启用了Cookie:)。

答案 2 :(得分:0)

您应该检查是否允许他们编辑提交的ID指示的记录,而不是尝试检查用户是否更改了任何内容。

如果允许他们编辑相关ID,请让他们这样做。如果没有,不要。甚至不用担心他们是否改变了表格数据,这是微不足道的。

反伪造令牌实际上没有任何用途,顺便说一下。

答案 3 :(得分:-1)

为防止CSRF攻击,您可以在表单部分中使用Html.AntiForgeryToken帮助方法