我正在使用隐藏的表单字段来存储用户正在编辑的当前记录。如何阻止用户更改该字段? MVC3的防伪助手会起作用吗,还是我需要自己检查?
答案 0 :(得分:0)
请参阅How to detect if form field has changed without using hidden field
建议使用散列并在回发时进行比较以检查是否已进行更改。
答案 1 :(得分:0)
似乎我误解了你的问题,对不起。 事实上,AntiForgeryToken不会帮助你防止这种情况发生。 您可以在模型中存储这些不可编辑的信息(在我的示例中为Account类),而不会将其暴露在会话中。您还可以在模型的属性中添加一些检查/事件提升,以检测不需要的版本。
您可以使用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帮助方法