Asp.net MVC 在 Session 中保留敏感信息是否安全?

标签 asp.net asp.net-mvc session

我的 Asp.net MVC 网站上有一个基本的身份验证系统

[HttpPost]
public ActionResult Login(LoginViewModel model, string returnUrl)
{
    WebSecurity.Login(model.UserName, model.Password, persistCookie: false)

    return RedirectToAction("Index", "Home");
}

我也有 UserInfoViewModel我保留一些用户特定信息的类,并在不同的页面上使用它。

避免创建 UserInfoViewModel每次我需要它时,我都想将它保存在登录方法的 session 中。
public ActionResult Login(LoginViewModel model, string returnUrl)
{
   WebSecurity.Login(model.UserName, model.Password, persistCookie: false)
   var userInfoViewModel = new UserInfoViewModel();
   Session["userInfo"] = userInfoViewModel;

    return RedirectToLocal(returnUrl);
}

考虑到我在内部有依赖的敏感信息 UserInfoViewModel , 喜欢 IsSuperuser , 将该对象保存在 Session 中是否安全?当用户登录 session 过期时它也会过期吗?

解决方案
System.Security.Principal.IIdentity正是为此而生。它将您需要的自定义用户信息保存在 AUTH cookie 中,因此您不必每次都重新计算。

Use Custom Principal Objects video turorial

谢谢你的回答!

最佳答案

是的,它是安全的,因为 Session 存储在服务器上。但是,如果您决定使用 ASP.NET session ,您应该考虑另一个问题。如果此 session 存储在 Web 服务器的内存中(默认),IIS 可以随时回收您的应用程序,您将丢失此 session 数据。另一方面,用户仍将通过身份验证,因为他会被表单例份验证 cookie 跟踪,该 cookie 仍将被发送。因此,如果您想使用 Sessions,我建议您切换到进程外 session 提供程序(例如 StateServerSQLServer )。

同样正如@Mikeb 在评论部分指出的那样,Session 存在另一个非常严重的问题。如果您为给定 Controller 启用读写模式,您将无法并行处理来自同一 session 的多个请求。服务器将依次阻塞和处理它们。例如,来自同一个 session 的多个 AJAX 请求。它们都将依次阻塞和处理。

关于Asp.net MVC 在 Session 中保留敏感信息是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14773598/

相关文章:

c# - 在 ASP.Net 中创建 razor 动态 html 表

c - 如何获取 Windows session 名称?

c# - 使用 Windows 计划任务及时调用控制台应用程序。这是一种有效的方法吗

asp.net - Azure PaaS 兼容性检查

c# - 无法访问已处置的对象对象名称: 'UserManager` 1'

asp.net-mvc - 在 ASP.NET mvc 中使用 Session 变量仍然可以,或者对于某些东西(比如购物车)有更好的选择吗

c# - Roslyn,通过 hostObject 传递值

c# - 如何发现一个asp.net客户端立即断开连接

asp.net - Gridview DataKeyNames 子类属性