2010-10-10 71 views
3

你们如何存储登录信息?存储登录信息的最佳实践

可能会在会话中存储日志记录状态。和Cookie的用户名。但是,最安全的做法是保护这些关键信息,防止落入不法之徒手中。

+0

in一个数据库?...... – 2010-10-10 11:47:38

+0

@Mitch,然后如何在下次登录时恢复信息,甚至IP可能会改变 – Starx 2010-10-10 12:20:44

回答

2

如果您将用户名用于识别,请不要将用户名存储在cookie中。因为cookie是客户端存储并且可以被操纵。将它存储在会话中,而不是服务器端存储。

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

0

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

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

0

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

如果你也在存储密码,那么先看看他们hashing--通常会有一些基本的混淆,比如先腌制它们以避免彩虹表攻击。

0

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

使用salted hash存储密码;最好是像Blowfish那样慢的,或者SHA-256重复几千次。 (如果你需要你的代码非常便携或者运行在老版本的PHP上,MD5/SHA1也可以,但是会让无知的人抱怨你正在使用一个已被“破解”的散列。)

+0

“或SHA-256重复几千次。”重复哈希是不是一个坏习惯? – 2014-12-24 07:32:35

+0

@NidhinDavid这肯定是一个比不重复散列更好的做法:-)使用HMAC或专门为密码存储创建的东西(比如bcrypt或scrypt)肯定会更好,但迭代的SHA散列没有实际的漏洞,迭代一个有相当明显的。 – Tgr 2014-12-24 21:23:39