在网络应用程序中,如社交网络用户登录并长时间做一些工作,如2小时或更长时间,现在我在会话中存储一些数据,如用户ID(会员表中的身份号码),并通过此查找用户详细信息数据id。
当每个用户登录到站点时,我会在该会话中为该用户存储该数据2小时。 对于这项工作,我将会话时间设置为120分钟,我想知道这项工作是否合适? 我的意思是存储会话2小时。
另一方面,我可以将该ID存储在客户端上的加密cookie上,我想知道这种方式是否安全,如果用户/黑客可以解密我的cookie并检索用户ID(此id是我的身份表id)可以攻击到我的网站并做了一些事情?
答案 0 :(得分:1)
在Web世界中,会话变量中的信息存储连接是错误的路径。您无法控制会话变量,并且可能会在所有问题中丢失。
我不知道所使用的体系结构,但在IIS服务器上,您可以在网站Web上的Web.config文件中为身份验证cookie配置加密密钥
<machineKey validationKey = "AutoGenerate, IsolateApps"
decryptionKey = "AutoGenerate, IsolateApps"
validation = "SHA1" decryption = "Auto" />
此信息不可能在客户端进行黑客攻击。
这是更好的方法
答案 1 :(得分:1)
使用cookie存储标识的问题可能不是解密cookie而是将cookie整合在一起。这是常见的会话和永久性cookie。
如果您希望在网站仍在浏览器中处于活动状态时不打扰用户使用新登录,请考虑较短的会话超时和javascript保持活动(例如每10分钟刷新页面)。否则,您将不再需要服务器上的大量会话。
如果您希望即使浏览器窗口关闭也要保持用户。考虑在cookie(例如Is browser fingerprinting a viable technique for identifying anonymous users?)中包含具有良好服务器加密的浏览器标识信息。
不要忘记强制使用https。
答案 2 :(得分:0)
不要存储在加密的cookie中。存储在已签名 Cookie中。这是不同的,这就是为什么:
拥有会话的“旧”替代方案比依赖签名cookie的可扩展性稍差,但它应该更安全,即使像NSA这样的人有各种方式来进行签名/加密。 **偏执声明**但是再说一次,如果他们有这种说法,他们很可能也会让中间人进入,各种各样的会话都毫无意义。