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