使用TempData [“id”]比使用隐藏字段跟踪往返HttpGet和HttpPost之间的ID更安全吗?

时间:2011-03-17 01:08:35

标签: asp.net asp.net-mvc asp.net-mvc-3

目的:

为防止用户在往返(从调用HttpGet处理到HttpPost处理操作方法)之间篡改任何id(例如:CustomerId,UserId,ProductId等),我想使用TempData[]。< / p>

然而,大多数人使用隐藏字段来跟踪ID。但我认为用户仍然可以篡改它们。

简而言之,

  1. 使用TempData["id"]比使用隐藏字段跟踪往返HttpGet和HttpPost之间的ID更安全吗?
  2. 使用TempData[]是否有任何不利之处?
  3. 编辑1

    在这种情况下,我仅使用TempData[]来跟踪ID,而不是其他字段。 其他字段仍然向用户公开。

3 个答案:

答案 0 :(得分:6)

您应始终验证用户输入,在这种情况下,请确保传入的任何ID实际上是用户也可以访问的ID。那么更安全吗?不是真的,因为如果你像你一样进行验证,那么隐藏的输入就没有任何缺陷。

使用tempdata意味着您接受来自路径(可能是)HTML表单和现在TempData的参数。这似乎非常复杂,而不是在控制器内部具有真正的安全性。

每次发出请求后,TempData也会消失。这意味着你的Post方法也必须填充TempData,增加额外的复杂性。

答案 1 :(得分:1)

据我所知,TempData存储在会话中。从技术上讲,这比隐藏字段(几乎所有内容)更安全,除非您的会话数据在cookie中持久存在。然后他们差不多。

如果您的会话数据存储在服务器端(比如内存或数据库),那么您没问题。

MVC 2及更高版本,TempData仅在读取时清除。所以你应该对此好。

答案 2 :(得分:1)

通常,您会在URL中公开id并使用权限,验证等,以确保用户只访问他们确实应该访问的数据(通过id)。如果您确实需要跟踪不应该在页面上的数据(例如,通过向导或购物车),那么我建议您只是明确地使用会话。