如果我在html表单中放置一个隐藏字段Id
,为了使用它来查找我想要编辑的用户,我可以使用浏览器检查器更改该值,当我提交表单时,它将修改错误的用户。
如何保护这样的东西?
答案 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匹配,您可以在每次收到请求时进行检查。