2011-03-20 110 views
4


我们一直在使用asp.net mvc进行开发。有时候,我们需要将一些隐藏的字段放在模型绑定器所推送的表单上(如预期的那样)。现在,用户可以轻松地使用萤火虫或其他工具锻炼表格。隐藏字段的目的主要是为了在服务器上提供一些信息,而不是要改变它们。例如,在我的编辑员工表单中,我可以将EmployeeID置于隐藏字段中,但如果用户更改隐藏字段中的employeeID,则会在数据库中更新错误的员工。在这种情况下,我们如何保持隐藏字段的完整性
视为隐藏字段的完整性:Asp.NET mvc

+2

在更新模型之前,始终可以进行服务器端验证。确保登录用户有权更新指定的员工。 – Sapph 2011-03-20 19:15:53

回答

5

您需要强制执行安全措施以确保进行修改的人员有权这样做。我也会把id放在URL中,而不是隐藏字段,依靠安全来确保人们不会修改他们不应该做的事情。如果他们在手动更改ID时有权修改该项目,则不会有问题。重要的是要确保一个人不能手动更改ID并获得他们不应该访问的东西。强制服务器端权限解决了这个问题。您可以使用Roles与AuthorizeAttribute一起轻松完成此操作。

+0

是的检查是为了确保每个人都访问或修改属于他的记录,但我仍然不希望用户手动更改ID并损坏其中的一个记录。 – 2011-03-21 04:50:30

4

如果用户更改 隐藏字段的雇员,员工错将 数据库

这是在您的网站主要安全漏洞更新。在你使用网页开发所做的一切事情中,无论用户的代码多么聪明,或者你认为只要用户不做任何事情就可以确定,请记住一条黄金法则:绝不隐式信任从客户端接收的数据。

为了修改您网站上的任何内容,用户必须已登录。(右?)因此,如果用户尝试向网站发布表单(特别是可以修改数据的表单)请检查提交表单的用户是否有权限对正在指定的数据执行请求的操作。

理想情况下,每个不完全公开且不安全的操作应该具有服务器端权限检查。永远不要相信客户发给你的东西。

1

一种可能的选择是将该静态一次性信息存储在服务器上的TempData中,而不是将其传递给可能被篡改的客户端。请记住,默认情况下,TempData使用会话并具有自己的限制 - 但它可能是一个选项。