如果我在 html 表单中放置了一个隐藏字段Id
,为了使用它来查找我想要编辑的用户,我可以使用浏览器检查器更改该值,并且当我提交表单时它会修改错误的用户。
如何保护这样的东西?
如果我在 html 表单中放置了一个隐藏字段Id
,为了使用它来查找我想要编辑的用户,我可以使用浏览器检查器更改该值,并且当我提交表单时它会修改错误的用户。
如何保护这样的东西?
基本上就是这样。如果用户手动修改客户端值或使用自己的值手动制作 POST,则应该发生以下两种情况之一:
如果用户通过网站的正常功能请求编辑该记录会发生什么?如果用户尝试手动操作,这正是应该发生的情况。
因此,基本上在执行编辑的控制器操作方法中,检查权限以确保它允许用户首先执行该编辑。不要依赖在调用 action 方法之前执行此操作,或者假设您返回的视图是调用 action 方法的视图。在每个单独的操作方法中,您可以根据需要检查该操作的权限。
您可以使用 MVC 安全扩展项目https://mvcsecurity.codeplex.com。
假设您要保护的领域是 Id...
在您的控制器发布方法上添加:
[ValidateAntiModelInjection("Id")]
在您的视图中添加:
@Html.AntiModelInjectionFor(m => m.Id)
@Html.HiddenFor(m => m.Id)
在发布时,您的 ID 字段将被验证。
您无法保护用户不编辑表单(要编辑表单的要点)。而且你不能真正阻止他们编辑 javascirpt 对象。这也很简单,浏览器也可以访问。但是您可以做的是将 id 存储在会话中。这样,您可以在每次收到请求时检查表单中的 id 是否与会话中的 id 匹配。