C# ASP.NET MVC ViewBag/TempData安全性

C# ASP.NET MVC ViewBag/TempData安全性,c#,asp.net-mvc,C#,Asp.net Mvc,我正在ASP.NET MVC上开发一个web应用程序,我正在使用ViewBag和TempData来存储一些值,这些值在用户注销之前会一直存在。例如:什么用户登录,一些内部ID,以便我可以检查角色和其他用户不应该知道的值 我的问题是: ViewBag/TempData是否适合此用途?我用得对吗 错了吗 这些工具安全吗?。用户可以嗅探这个值吗 有什么办法吗 感谢您的回答。TempData只会持续到下一页访问;ViewBag用于将值从控制器传递到视图。两者都不适合存储将持续会话的信息。在安全性方面,它

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

我的问题是:

  • ViewBag/TempData是否适合此用途?我用得对吗 错了吗
  • 这些工具安全吗?。用户可以嗅探这个值吗 有什么办法吗

  • 感谢您的回答。

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


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

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

    ViewBag用于查看视图中需要的附带数据。页面标题之类的。对于视图中需要的其他数据,应使用模型

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


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

    为了检查用户角色,您可以使用MVC基于角色的授权如
    [Authorize(Roles=“Administrator”)]
    。。。。对于您的查询(2):,它们是安全的。。。但这并不是为了长期保存某些东西。对于这种持续时间,开发人员主要使用
    会话
    ,这也是安全的

    为什么要混合使用ViewBag和tempdata?它们是不同用途的东西。你应该张贴一个你正在做的事情的例子。顺便说一句,它们都不能用于存储必须存在多个http请求的数据。为了检查用户角色,您可以使用MVC基于角色的授权,如
    [Authorize(Roles=“Administrator”)]
    。。。。您的查询(2):是的,它们是安全的。。。但这并不是为了长期保存某些东西。对于这样的持续时间,开发人员主要使用
    会话
    ,这也是安全的。在使用会话之前先看一看:谢谢,正如我在回答中指出的,有很多赞成和反对的意见,