如何保护表单免受手动更改

时间:2013-07-06 23:50:28

标签: asp.net-mvc

如果我在html表单中放置一个隐藏字段Id,为了使用它来查找我想要编辑的用户,我可以使用浏览器检查器更改该值,当我提交表单时,它将修改错误的用户。

如何保护这样的东西?

3 个答案:

答案 0 :(得分:2)

  • 始终假设用户可以执行此操作。
  • 始终在服务器端代码中验证用户可以在执行操作之前执行用户尝试执行的操作。

基本上就是这样。如果用户手动修改客户端值或手动创建具有自己值的POST,则应该发生以下两种情况之一:

  • 如果允许用户执行该操作,则执行操作,服务器照常响应。
  • 如果不允许用户执行该操作,则服务器会响应错误。

如果用户通过网站的正常功能请求编辑该记录,会发生什么?如果用户尝试手动执行此操作,那就是应该发生的事情。

因此,基本上在执行编辑的控制器操作方法中,检查权限以确保允许用户首先执行该编辑。在调用action方法之前不要依赖于,或者假设您返回的视图是从中调用action方法的视图。在每个单独的操作方法中,您只需根据需要检查权限。

答案 1 :(得分:1)

您可以使用MVC Security Extensions项目https://mvcsecurity.codeplex.com

说你要保护的字段是Id ...

在你的控制器发布方法上添加:

[ValidateAntiModelInjection("Id")]

在您的视图中添加:

@Html.AntiModelInjectionFor(m => m.Id)
@Html.HiddenFor(m => m.Id)

在发布时,您的Id字段将被验证。

答案 2 :(得分:0)

您无法保护用户免于编辑表单(要编辑表单的点)。你真的不能阻止他们编辑javascirpt对象。这也很简单,可以通过浏览器访问。但你可以做的是将id存储在会话中。这样,如果表单中的id与会话中的id匹配,您可以在每次收到请求时进行检查。