Session 会话中的密码安全
我们使用高计算成本的强散列函数和随机salt来阻止彩虹攻击等,而不是对纯文本密码进行排序 但是,当用户在会话中时,通常会将其用户名与密码散列一起存储为cookie以验证会话。如果用户的浏览器cookie空间被破坏,攻击者不是更容易获得破解用户名+会话散列而不是用户名+传递散列的目标吗Session 会话中的密码安全,session,authentication,cookies,hash,passwords,Session,Authentication,Cookies,Hash,Passwords,我们使用高计算成本的强散列函数和随机salt来阻止彩虹攻击等,而不是对纯文本密码进行排序 但是,当用户在会话中时,通常会将其用户名与密码散列一起存储为cookie以验证会话。如果用户的浏览器cookie空间被破坏,攻击者不是更容易获得破解用户名+会话散列而不是用户名+传递散列的目标吗 例如,在Django中,密码用PBKDF2或bcrypt散列,但会话散列使用不太复杂的HMAC,并且没有随机salt。这是安全问题吗?如果是,处理会话的正确方法是什么?对于每个会话,我建议使用专用SessionID
例如,在Django中,密码用PBKDF2或bcrypt散列,但会话散列使用不太复杂的HMAC,并且没有随机salt。这是安全问题吗?如果是,处理会话的正确方法是什么?对于每个会话,我建议使用专用SessionID-随机长128位值。并且,将会话密钥保持为:
username:SessionID:hash
在哪里
每次,当您收到cookie时,您都需要再次计算哈希值,并与收到的哈希值进行比较
因此,此cookie在会话关闭后无效(SessionID不匹配)。
此外,若cookie将从活动会话中被盗,服务器可以
找出来自另一台计算机的被盗cookie的攻击,因为来自真实客户端的客户端IP将不同于实际客户端IP
当然,如果更改了ClientIP,会话将自动断开
备选方案-使用基于客户端的身份验证系统
例如,SSL证书-。对于每个会话,我建议使用专用SessionID-随机长128位值。并且,将会话密钥保持为:
username:SessionID:hash
在哪里
每次,当您收到cookie时,您都需要再次计算哈希值,并与收到的哈希值进行比较
因此,此cookie在会话关闭后无效(SessionID不匹配)。
此外,若cookie将从活动会话中被盗,服务器可以
找出来自另一台计算机的被盗cookie的攻击,因为来自真实客户端的客户端IP将不同于实际客户端IP
当然,如果更改了ClientIP,会话将自动断开
备选方案-使用基于客户端的身份验证系统
SSL证书,例如-