回答
如果您将用户名用于识别,请不要将用户名存储在cookie中。因为cookie是客户端存储并且可以被操纵。将它存储在会话中,而不是服务器端存储。
通常情况下,身份验证成功时,您将用户标识信息存储在会话中,并仅将会话ID传递给客户端。由此用户信息在服务器端保持受保护。
将用户名存储在会话变量中。会话存储在服务器上,cookie中只有一个识别码。
如果您还需要保护会话号码,请使用HTTPS/SSL加密HTTP连接。但是,这将要求您从批准的发行人处购买SSL证书。
如果您要存储登录信息,则需要采取措施避免会话劫持。将会话ID存储在数据库中,以及诸如用户IP和浏览器useragent字符串之类的内容,并检查每次事件是否匹配。
如果你也在存储密码,那么先看看他们hashing--通常会有一些基本的混淆,比如先腌制它们以避免彩虹表攻击。
将用户标识存储在会话变量中;如果您需要缓存权限级别等内容,请将其存储在那里。将会话ID存储在cookie中;使用HttpOnly。如果安全/隐私非常重要,那么对所有内容使用SSL(并使用纯SSL cookie;另外,请查看Strict-Transport-Security标题,该标题即将在Firefox中可用)。否则,最好至少通过SSL发送登录信息。 (不幸的是,SSL需要来自主流浏览器信任的提供商的证书,这可能要花费很高的成本。)确保在登录时启动新会话以防止session fixation。
使用salted hash存储密码;最好是像Blowfish那样慢的,或者SHA-256重复几千次。 (如果你需要你的代码非常便携或者运行在老版本的PHP上,MD5/SHA1也可以,但是会让无知的人抱怨你正在使用一个已被“破解”的散列。)
“或SHA-256重复几千次。”重复哈希是不是一个坏习惯? – 2014-12-24 07:32:35
@NidhinDavid这肯定是一个比不重复散列更好的做法:-)使用HMAC或专门为密码存储创建的东西(比如bcrypt或scrypt)肯定会更好,但迭代的SHA散列没有实际的漏洞,迭代一个有相当明显的。 – Tgr 2014-12-24 21:23:39
- 1. Facebook登录最佳实践
- 2. 最佳实践 - 存储过程记录
- 3. 在源代码中存储敏感信息的最佳实践
- 4. 版本信息的最佳实践?
- 5. 未登录存储信息
- 6. 条纹卡信息最佳实践等
- 7. 日志信息最佳实践
- 8. JQuery Mobile - 用户登录最佳实践
- 9. iOS + PHP登录最佳实践
- 10. 最佳实践登录功能
- 11. 用户登录审核 - 最佳实践
- 12. 路由到ParentComponent通信,登录状态的最佳实践
- 13. 设置/获取用户是否登录信息的最佳实践
- 14. ASP.Net MVC存储CustomIdentity的最佳实践
- 15. 存储数据的最佳实践
- 16. 什么是存储数据库连接相关信息的最佳实践?
- 17. 备份s3存储桶最佳实践
- 18. 常用存储库maven最佳实践
- 19. 存储库模式最佳实践
- 20. SQL查询 - 20密尔记录 - 最佳实践返回信息
- 21. Ajax消息最佳实践
- 22. 记录ASP.NET - 最佳实践
- 23. 在iPhone上保存用户登录信息的最佳方式
- 24. 将登录信息存储在Cookie中
- 25. 安全(r)存储MySQL登录信息?
- 26. 缓存 - 最佳实践
- 27. 缓存最佳实践
- 28. 最佳实践将数据存储在本地存储中
- 29. winforms通信的最佳实践?
- 30. 实现缓存的最佳实践
in一个数据库?...... – 2010-10-10 11:47:38
@Mitch,然后如何在下次登录时恢复信息,甚至IP可能会改变 – Starx 2010-10-10 12:20:44