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

asp.net中User.Identity中的Ticket.UserData有多安全

发布时间:2020-12-16 06:35:02 所属栏目:asp.Net 来源:网络整理
导读:我的网站使用ASP.NET的表单身份验证,我将用户特定的信息插入到身份验证票证/ cookie的UserData部分.由于UserData位于身份验证票据内,因此它是加密的 authCookie.Value = FormsAuthentication.Encrypt(newTicket); 现在我不太担心此时数据受到损害,因为它已加
我的网站使用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中的数据不会更改.一旦用户登录,它就是常量.

解决方法

i need more data on certain pages
depending on what the user does. right
now i am using sessions but now i want
to move everything over into cookies.
it’s not a lot of data so i figured i
could piggyback everything into the
auth ticket/cookie

@ jorsh1基于对@Portman的推荐,Ticket.UserData不是存储更改数据的地方.从一个页面转到另一个页面时,您不希望始终重新创建身份验证票证.

将会话数据与会话服务或Sql Server一起使用.如果您不希望会话中的数据,并且数据很小且不敏感,那么请使用cookie. (*)

使用UserData的MS规范示例是存储诸如角色列表之类的内容,以便您可以说“我认为此用户是管理员”,但如果它类似于管理员角色,您可能会点击数据库来检查在你隐含地信任cookie中的内容之前.

string plainTextUserData = fid.Ticket.UserData;

这仅适用于您的应用程序,因为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,或者只是在数据库中保留临时状态.

(编辑:李大同)

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

    推荐文章
      热点阅读