1

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

如何保护这样的东西?

4

3 回答 3

2
  • 始终假设用户可以做到这一点。
  • 始终在服务器端代码中验证是否允许用户在执行之前执行用户尝试执行的操作。

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

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

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

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

于 2013-07-06T23:54:39.003 回答
1

您可以使用 MVC 安全扩展项目https://mvcsecurity.codeplex.com

假设您要保护的领域是 Id...

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

[ValidateAntiModelInjection("Id")]

在您的视图中添加:

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

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

于 2013-12-05T06:52:27.973 回答
0

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

于 2013-07-06T23:55:48.940 回答