存储登录信息的最佳实践

时间:2010-10-10 11:44:08

标签: php security

你们如何存储登录信息?

可能会在会话中存储已记录的状态。和cookie的用户名。但是,保护这些重要信息的最安全做法是什么,而不是落入坏人手中。

4 个答案:

答案 0 :(得分:2)

如果您将用户名用于身份验证,请勿将用户名存储在Cookie中。因为cookie是客户端存储并且可以被操纵。将其存储在会话中,而不是服务器端存储。

通常,当身份验证成功时,您将用户标识信息存储在会话中,并仅将会话ID传递给客户端。这样,用户信息在服务器端保持受保护。

答案 1 :(得分:0)

将用户名也存储在会话变量中。会话存储在服务器上,cookie中只有一个标识号。

如果您还需要保护会话号,请使用HTTPS / SSL加密HTTP连接。但是,这将要求您从批准的发行人处购买SSL证书。

答案 2 :(得分:0)

如果您要存储登录信息,则需要采取措施避免会话劫持。将会话ID与用户IP和浏览器useragent字符串一起存储在数据库中,并检查每次事物是否匹配。

如果您也存储密码,请先查看hashing - 通常会先进行一些基本的混淆,比如先将它们腌制以避免彩虹表攻击。

答案 3 :(得分:0)

将用户ID存储在会话变量中;如果你需要缓存权限级别的东西,也存储在那里。将会话ID存储在cookie中;使用HttpOnly。如果安全/隐私非常重要,请为所有内容使用SSL(并使用仅限SSL的cookie;另外,请查看Strict-Transport-Security标题,很快就可以在Firefox中使用)。否则,最好至少通过SSL发送登录。 (不幸的是,SSL需要来自主流浏览器信任的提供商的证书,这可能很昂贵。)确保在登录时启动新会话以防止session fixation

使用salted哈希来存储密码;最好像Blowfish那样缓慢,或者SHA-256重复几千次。 (如果你需要你的代码非常便携或在旧版本的PHP上运行,MD5 / SHA1也可以,但它会让无知的人抱怨你使用的是已经“破坏”的哈希。)