用户有2个会话(用户ID,用户名),不安全?

时间:2013-11-06 15:40:10

标签: c# asp.net security session web

如果有人登录,我会保存2个会话。

Session["userid"]
Session["nickname"]

Session["userid"]用于从数据库中检索有关用户的数据。

Session["nickname"]用于将用户重定向到他的个人资料页面

(示例:www.test.com/mike(在这种情况下,''Mike''是昵称。)

我想知道这个想法是否安全?是建议这样做,还是有其他更好的选择?

4 个答案:

答案 0 :(得分:1)

您不是在会话中存储两个会话,而是存储两个变量。有两个变量没有根本的错误,我唯一的想法是如果更新nickname会发生什么?每次使用userid作为键而不是在登录发生后修复静态变量时,从DB中查找昵称不是更好吗?

话虽如此,使用表单身份验证票证比使用Session更安全。请看这里有一些很好的理由:https://stackoverflow.com/a/18077422/413180

答案 1 :(得分:0)

我没有看到一个大问题,除非以后可以更改某个用户的昵称。在这种情况下,用户配置文件的URL将会更改,您应该正确调整所有链接。

对于URL,我会使用UID。并将它存储在SESSION变量中。例如,如果用户更改其中一个SESSION变量的值,会发生什么?你会在每个页面加载中验证它吗?

答案 2 :(得分:0)

如果数据是安全的或不安全的,那么数据是否存储在两个单独的Session对象中并不重要。因此,如果某人可能恶意使用用户ID或昵称,那么它就是不安全的;否则没有。

我通常将用户信息存储在一个名为Session的{​​{1}}对象中,该对象代表一个类的实例。在您的情况下,创建一个只包含两条​​信息的类可能有点过分。

我建议不要仅使用昵称作为网址,因为如果LoggedOnUser值发生变化怎么办?用户ID似乎更合适,因为它不太可能改变,如果有的话。这就是StackOverflow如何使用您的用户个人资料(nickname),如果您有以前的昵称,那么旧昵称将根据您的用户ID值映射到当前昵称。

答案 3 :(得分:0)

简短回答:这是不安全的

如果您不使用SSL,用户会话可能会被特别劫持,这只是时间问题,取决于一些因素,例如黑客的专业性,她拥有的设施等等。 作为一种解决方案,我建议你使用Forms Authentication
如果你仍然坚持使用Session来存储这种敏感信息的类型,那么我建议你生成一个临时密钥(一个GUID用于示例)并将该密钥与特定时间量关联到用户对象(您需要将此密钥存储在db中)。您还可以将更多信息绑定到此密钥,例如客户端的IP地址。将此临时密钥存储在Session中并仅在此密钥有效且IP地址没有可疑更改时才处理请求。