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/

相关文章:

asp.net - 一种在页面上存储 View 以及何时保存在数据库中的快速方法

c# - 通过HttpClient使用外部REST Web服务的存储库模式示例?

python - Django HTTPS 设置 : Why does setting both SESSION_SAVE_EVERY_REQUEST and SESSION_COOKIE_SECURE break sessions?

c# - 使用 SignalR 发送 JSON

c# - 在asp.net c#上的gridview上更改行或记录的颜色?

asp.net-mvc - JqG​​rid 隐藏/显示列

PHP Session Expiration - 什么时候刷新?

ruby-on-rails - Rails + Sinatra 应用程序分享会

asp.net - 如何将对象添加到缓存并从 MVC4 中的缓存中访问数据?

c# - ASP.NET MVC 中的复选框禁用属性