我目前正在用ADO.NET实体框架在ASP.NET MVC中构建一个非常小的/简单的Web应用程序。我在墙上做了一个数据库中的一条记录的编辑,我必须在html内包含唯一的id(主键)作为隐藏字段。这是基于我在这里问了一个问题的One Possible Solution。根据网页中的隐藏字段编辑数据库记录有哪些安全风险?
恐怕这可能会打开我的数据库,供其他人编辑该表的其他记录。
MVC会在内部处理这种安全风险吗?
我目前正在用ADO.NET实体框架在ASP.NET MVC中构建一个非常小的/简单的Web应用程序。我在墙上做了一个数据库中的一条记录的编辑,我必须在html内包含唯一的id(主键)作为隐藏字段。这是基于我在这里问了一个问题的One Possible Solution。根据网页中的隐藏字段编辑数据库记录有哪些安全风险?
恐怕这可能会打开我的数据库,供其他人编辑该表的其他记录。
MVC会在内部处理这种安全风险吗?
无论您使用哪种服务器端技术,都可能会在客户端发生篡改ID的情况。正如其他人所建议的那样,可以使用某种形式的认证/授权方案在用户操作之前检查权限。
如果您不将该ID转发回服务器以供您的操作使用,那么您将无法将用户操作与服务器代码绑定。
隐藏字段通常用于包含用于编辑的ID。只需检查以确保当帖子在服务器端收到时允许用户编辑相关行。
MVC框架不会在您的隐藏字段后清理。你的ID不是一个巨大的风险,有像删除链接那样的东西。
继续,我会说。
善良,
丹
不,这是你要照顾的东西。但是,这是不是一个真正的“secruity”的问题,如果你检查用户的权限
“黑客之前“然后仍然可以将隐藏字段”X的ID“编辑为”Y的ID“。如果他不能编辑“Y”,检查应该禁止。如果他最初可以编辑Y,他可以声称“我通过使用Y的视图来更改X,尽管我也可以使用他对X的观点”。
正如其他人所说,物品ID本身并不具有安全风险。
但是,如上所述,为了回答您的问题,隐藏字段带来与可见字段相同的安全风险。
来自webforms我在想和你一样的事情。您总是需要构建一些服务器端代码来检查编辑和删除。我遇到的问题是用户只能通过更改源代码来删除其他用户的项目。为了防止它,我只需要检查用户是否删除了属于他的物品。
我的建议是使用uid,这是一个记录的唯一32位唯一标识号。所以你的数据库会被保护,因为如果用户在隐藏字段中看到uuid。他不能猜测该表的其他ID,因为它们是唯一的和随机的