asp.net中User.Identity中的Ticket.UserData有多安全
我的网站使用ASP.NET的表单身份验证,我将用户特定的信息插入到身份验证票证/ cookie的UserData部分.由于UserData位于身份验证票据内,因此它是加密的
authCookie.Value = FormsAuthentication.Encrypt(newTicket); 现在我不太担心此时数据受到损害,因为它已加密.但我注意到这些数据是以未加密的形式提供的 FormsIdentity fid = User.Identity as FormsIdentity; string plainTextUserData = fid.Ticket.UserData; 数据本身并不太重要.即使别人能看到它,我仍然可以.但我不能让人们劫持这些信息,并开始将其作为自己的信息使用.例如,我不希望一个用户登录,假装是一个不同的用户(基于UserData中包含的用户ID) 这是我要担心的事吗? 编辑1: 我想这样做的原因是我可以停止使用会话,只使用cookie和Ticket.UserData 编辑2: Ticket.UserData中的数据不会更改.一旦用户登录,它就是常量. 解决方法
@ jorsh1基于对@Portman的推荐,Ticket.UserData不是存储更改数据的地方.从一个页面转到另一个页面时,您不希望始终重新创建身份验证票证. 将会话数据与会话服务或Sql Server一起使用.如果您不希望会话中的数据,并且数据很小且不敏感,那么请使用cookie. (*) 使用UserData的MS规范示例是存储诸如角色列表之类的内容,以便您可以说“我认为此用户是管理员”,但如果它类似于管理员角色,您可能会点击数据库来检查在你隐含地信任cookie中的内容之前.
这仅适用于您的应用程序,因为Asp.Net已经为您解密了该票证.但是,如果要设置数据IIRC,则需要重新创建并重新附加表单身份验证cookie. FormsAuthenticationTicket ticket = new FormsAuthenticationTicket( currentTicket.Version + 1,currentUser.UserName,now,now.Add(formsAuthentication.Timeout),false,"new user data string",FormsAuthentication.FormsCookiePath); string hash = FormsAuthentication.Encrypt(ticket); HttpCookie cookie = new HttpCookie( FormsAuthentication.FormsCookieName,hash); Response.Cookies.Add(cookie); 另一个应用程序无法解码此票证,除非它知道解密密钥或它是暴力强制的.如果您负载平衡应用程序或使用Web园,you even need to keep the keys in sync. *我不支持在会话中存储东西.通常还有另一种方法来保存这些数据. [编辑]我使用的会话: 我经常发现自己做的唯一事情是在基于会话服务器的会话中存储用户关键数据的精简版本.然而,我们使其透明加载,并确保不重复票证中的内容. 这样我们就不会暴露任何敏感的cookie,我们也不依赖于会话.我们还设置积极的会话回收.结合会话中存储的少量数据,会话不会给我们带来问题,因为只有一段代码知道会话中的什么,我们可以轻松地重构它. 对于其他任何事情,会议是邪恶的.我更喜欢在需要它的页面中维护viewstate,或者只是在数据库中保留临时状态. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – ASP.NET MVC 4重定向回索引视图
- asp.net – 在我的UpdatePanel完成加载DOM元素后,如何从我的
- asp.net-mvc – 如何填充/验证您的ViewModels?
- asp.net – Web API中的客户端证书和基于声明的身份
- asp.net – 如何使用AntiXss Library正确清理内容?
- Debug ASP.NET Core 2.0源代码
- asp.net-membership – 如何获得会员资格的用户ID?
- VS项目发布到本地IIS
- asp.net-mvc-3 – MVC3中的模型级错误?
- 如何在asp.net上的ButtonClick上使用Javascript隐藏GridVie
- 我是否必须在ASP.NET中使用Viewstate
- ASP.Net Core下Authorization的几种方式
- asp.net-mvc – 使用View.Render方法将MVC视图转
- asp.net-mvc – 如何使用绑定前缀?
- HttpClientFactory与Steeltoe结合来完成服务发现
- asp.net – MVC EF Code首先一对一的关系错误
- asp.net-mvc-3 – WSFederationAuthenticationMo
- ASP.NET多个Eval字段
- asp.net-mvc – 如何手动创建简单的成员资格sql表
- asp.net-mvc – ASP.NET Web API无法在Azure上运