为防止用户在往返(从调用HttpGet处理到HttpPost处理操作方法)之间篡改任何id(例如:CustomerId,UserId,ProductId等),我想使用TempData[]
。< / p>
然而,大多数人使用隐藏字段来跟踪ID。但我认为用户仍然可以篡改它们。
简而言之,
TempData["id"]
比使用隐藏字段跟踪往返HttpGet和HttpPost之间的ID更安全吗?TempData[]
是否有任何不利之处?在这种情况下,我仅使用TempData[]
来跟踪ID,而不是其他字段。
其他字段仍然向用户公开。
答案 0 :(得分:6)
您应始终验证用户输入,在这种情况下,请确保传入的任何ID实际上是用户也可以访问的ID。那么更安全吗?不是真的,因为如果你像你一样进行验证,那么隐藏的输入就没有任何缺陷。
使用tempdata意味着您接受来自路径(可能是)HTML表单和现在TempData的参数。这似乎非常复杂,而不是在控制器内部具有真正的安全性。
每次发出请求后,TempData也会消失。这意味着你的Post方法也必须填充TempData,增加额外的复杂性。
答案 1 :(得分:1)
据我所知,TempData存储在会话中。从技术上讲,这比隐藏字段(几乎所有内容)更安全,除非您的会话数据在cookie中持久存在。然后他们差不多。
如果您的会话数据存储在服务器端(比如内存或数据库),那么您没问题。
MVC 2及更高版本,TempData仅在读取时清除。所以你应该对此好。
答案 2 :(得分:1)
通常,您会在URL中公开id并使用权限,验证等,以确保用户只访问他们确实应该访问的数据(通过id)。如果您确实需要跟踪不应该在页面上的数据(例如,通过向导或购物车),那么我建议您只是明确地使用会话。