当我想提交表单来保存已编辑的记录时,我应该将其 Id 传递给控制器。然后客户端(或攻击者)可能会更改表单上我不想更改的一些信息(例如此 Id)。我可以创建一个散列隐藏字段来检查只读字段是否未更改,并在将其发布到控制器时进行验证。 对于这个问题还有其他好的做法吗?
谢谢
您可以使用服务器端算法对要保护的数据进行编码,这样该视图仅接收编码数据。当用户将表单传递给控制器时,您将解码数据并检查有效性。还要记住不仅要实现客户端验证,还要为您的模型实现服务器端验证。
AntiForgeryToken: ASP.NET MVC 中的一个很棒的功能是 AntiForgeryToken。这会生成一个隐藏的表单字段(防伪令牌),该字段在提交表单时进行验证。防伪令牌可用于帮助保护您的应用程序免受跨站点请求伪造
.cshtml代码
@using (Html.BeginForm("Index", "Home"))
{
@Html.AntiForgeryToken()
}
控制器代码
[ValidateAntiForgeryToken()]
[HttpPost]
public ActionResult Index()
{
//Your Code
return View();
}