【问题标题】:ASP.NET MVC ViewBag / TempData SecurityASP.NET MVC ViewBag / TempData 安全性
【发布时间】:2016-02-20 17:17:30
【问题描述】:

我正在 ASP.NET MVC 上开发一个 Web 应用程序,我正在使用 ViewBag 和 TempData 来存储一些值,这些值将在用户注销之前一直存在。即:登录的用户、一些内部 ID,以便我可以检查角色和用户不应该知道的其他值。

我的问题是:

  1. ViewBag / TempData 是否适合这种用途?我使用正确还是 错了吗?
  2. 这些工具安全吗?用户可以嗅探这个值吗 以某种方式?。

感谢您的回答。

【问题讨论】:

  • 为什么要混合 ViewBag 和 tempdata?对于不同的用途,它们是不同的东西。你应该发布一个你正在做什么的例子。顺便说一句,它们都不能用于存储必须存在多个 http 请求的数据
  • 为了检查用户的角色,您可以使用基于 MVC 角色的 授权,例如 [Authorize(Roles = "Administrator")] .... 您的查询 (2):是,它们是安全的……但不是为了您长期存储东西的目的。对于这样的持续时间,开发人员大多使用Session,这也是安全的

标签: c# asp.net-mvc


【解决方案1】:

TempData 只持续到下一个页面访问; ViewBag 用于将值从控制器传递到视图。两者都不适合存储将持续到会话的信息。在安全方面,它们都是服务器端,用户不会注意到它们,所以,是的,它们是安全的。

如果您想在会话期间保留值,则需要不同的机制。有几个可供您使用。我最喜欢的是使用会话变量,但一些开发人员坚决反对会话变量。您需要进一步研究您的选择。

【讨论】:

【解决方案2】:

您应该将基于会话的数据存储在会话中。

ViewBag 用于存放 View 中所需的附带数据。页面标题之类的。对于视图中需要的其他数据,您应该使用模型。

TempData 用于下一个操作所需的附带数据。它可以存储服务器-客户端-服务器之间的往返数据;之后它会被移除,除非你特别让它留在身边。

这些都不会暴露存在安全风险的数据,除非你傻到故意向客户端发送安全数据。

【讨论】:

    【解决方案3】:

    为了您检查用户角色的目的,您可以使用基于 MVC 角色的授权,例如 [Authorize(Roles = "Administrator")] .... 您的查询 (2):是,他们是安全的......但不是为了您长时间存储东西的目的。在这种情况下,开发人员大多使用Session,这也是安全的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多