4

我们一直在使用 asp.net mvc 进行开发。有时,我们需要在表单上放置一些隐藏字段,这些字段由 modelbinder 推送到模型中(如预期的那样)。如今,用户可以使用 firebug 或其他实用程序轻松调整表单。隐藏字段的目的主要是按原样向服务器提供一些信息,它们并不意味着改变。

例如,在我的编辑员工表单中,我可以将 EmployeeID 放在隐藏字段中,但如果用户更改隐藏字段中的员工 ID,则会在数据库中更新错误的员工。在这种情况下,我们如何保持隐藏字段的完整性。

4

3 回答 3

5

您需要强制执行安全性以确保进行修改的人有权这样做。我通常还将 id 放在 URL 中而不是隐藏字段中,依靠安全性来确保人们不会修改他们不应该修改的东西。如果他们在手动更改 id 时确实有权修改项目,那应该不是问题。重要的是要确保一个人不能手动更改 id 并访问他们不应该访问的东西。强制服务器端权限解决了这个问题。您可以使用 Roles 和 AuthorizeAttribute 轻松完成此操作。

于 2011-03-20T19:18:14.413 回答
4

如果用户更改隐藏字段中的employeeID,则会在数据库中更新错误的员工

这是您网站中的一个主要安全漏洞。在您对 Web 开发所做的每一件事中,无论某人的代码多么聪明,或者您认为只要用户不做某事就可以了,请记住一条黄金法则:永远不要隐含地信任从客户端接收到的数据。

为了修改您网站中的任何内容,用户必须登录。(对吗?)因此,在用户尝试向网站发布表单(尤其是可以修改数据的表单)时,请仔细检查用户是否提交表单有权对指定的数据执行请求的操作。

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

于 2011-03-20T19:22:25.917 回答
1

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

于 2011-03-20T23:37:14.620 回答