隐藏字段的完整性:Asp.NET mvc

时间:2011-03-20 19:13:59

标签: asp.net-mvc asp.net-mvc-2 asp.net-mvc-3 hidden-field

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

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

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:4)

  

如果用户更改了employeeID   隐藏的领域,错误的员工将   在数据库中更新

这是您网站中的主要安全漏洞。在使用Web开发的所有事情中,无论用户的代码多么聪明,或者只要用户不做某事,您认为自己会有多好,请记住一条黄金法则:从不隐含地信任从客户。

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

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

答案 2 :(得分:1)

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