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

LaT*_*TeX 3 asp.net asp.net-mvc asp.net-mvc-3

目的:

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

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

简而言之,

  1. 使用TempData["id"]比使用隐藏字段更安全地跟踪往返HttpGet和HttpPost之间的ID?
  2. 使用有什么不利之处TempData[]吗?

编辑1

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

Joh*_*ell 6

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

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

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

  • @CtrlDot - 如果userId = 3983并且您正在编辑Car 382,那么您需要检查以确保用户可以加载carI,其中userId = 3983和Car = 382,然后验证该编辑车的保存逻辑.这可以防止任何安全问题.如果用户想要访问423,那么对POST操作没有权限将失败.如果用户决定破解隐藏字段来编辑汽车,那么他已经拥有了很好的权限,所以就这样吧. (2认同)