2016-02-20 72 views
0

我正在ASP.NET MVC上开发一个Web应用程序,我正在使用ViewBag和TempData来存储一些值,直到用户注销才能存活。即:用户登录的是哪些内部ID,以便我可以检查角色以及用户不应该知道的其他值。ASP.NET MVC ViewBag/TempData安全

我的问题是:

  1. 是ViewBag/TempData的好此用途?我是否正确使用或者 错误?
  2. 这些工具是否安全?用户可以嗅一下这个值 吗?

感谢您的回答。

+0

为什么混合ViewBag和tempdata?对于不同的用途他们是不同的东西。你应该发表一个你正在做的事情的例子。顺便说一下,它们都不适用于存储必须存在多个http请求的数据 – tede24

+0

为了检查用户角色的目的,您可以使用MVC基于角色的**授权**,例如'[Authorize(Roles =“Administrator”)) ]'....你的查询(2):**是**,它们是安全的......但不是为了长时间储存​​东西的目的。对于这种持续时间,开发人员大多使用'Session',这也是安全的 –

回答

2

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

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

1

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

ViewBag存在View中需要的附带数据。页面标题,这样的事情。对于视图中需要的其他数据,您应该使用该模型。

TempData用于下一个操作所需的附带数据。它可以存储服务器 - 客户机 - 服务器之间的往返数据;之后,除非你专门让它坚持下去,否则它会被删除。

这些都不会暴露数据是一种安全风险,除非您足够愚蠢地将安全数据发送到客户端。

0

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