加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 06:32:08 所属栏目:asp.Net 来源:网络整理
导读:我的 Asp.net MVC网站上有一个基本的身份验证系统 [HttpPost]public ActionResult Login(LoginViewModel model,string returnUrl){ WebSecurity.Login(model.UserName,model.Password,persistCookie: false) return RedirectToAction("Index","Home");} 我还
我的 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 on Login方法中.

public ActionResult Login(LoginViewModel model,string returnUrl)
{
   WebSecurity.Login(model.UserName,persistCookie: false)
   var userInfoViewModel = new UserInfoViewModel();
   Session["userInfo"] = userInfoViewModel;

    return RedirectToLocal(returnUrl);
}

考虑到我在UserInfoViewModel中依赖敏感信息,比如IsSuperuser,将该对象保存在Session中是否安全?它会在用户登录会话到期时到期吗?

System.Security.Principal.IIdentity是为此而制作的.它保存了您需要的AUTH cookie内部自定义用户信息,因此您不必每次都重新计算它.

Use Custom Principal Objects video turorial

谢谢你的回答!

解决方法

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

同样正如@Mikeb在评论部分指出的那样,会话还有另一个非常严重的问题.如果为给定控制器启用了读写模式,则无法并行处理来自同一会话的多个请求.服务器将按顺序阻止和处理它们.例如,考虑来自同一会话的多个AJAX请求.它们都将按顺序阻塞和处理.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读