这是一个多部分问题,所以随时给任何一个部分的输入,但因为我只能接受一个答案,我会接受最完整的答案与所有被问到的关系。如果它们相关且有用,我将赞扬部分答案。用户身份验证与“记住我”
首先,有点背景,没有去TL; DR上的问题:我使用Quake Framework(是的,这是我的)这个项目 - 快速形容它,它使用笨和的jQuery 1.8.0主要是(除其他外,但它们与问题无关)。它还包括Total Storage jQuery插件(用于本地存储)和jQuery Cookies作为不支持本地存储的浏览器的后备。
1部分:
我建立了一个用户认证系统。登录有一个“记住我”功能(它还没有正常工作) - 存储用户数据的最佳方式是什么?一些想法:
- 将用户名和sha1'd密码存储在本地存储/ cookie中。这在我看来似乎是一个不安全的选择,但我不确定。
- 商店某种散列(也许PHP的
com_create_guid()
?)在localStorage的/饼干,以及在数据库中(也许随着对到期的日期?)
第2部分:
在执行“记住我”功能之后,完成它的最佳方式是什么?我是否应该让每个页面检查cookie(因为用户最初可能会打到任何页面并需要重新记录?)虽然每个页面当然需要检查会话,并且一旦它们被cookie /本地存储器重新记录,他们会得到一个常规会话,在每个页面上检查一个会话和一个cookie似乎是非常多余的(我们当然会首先检查一个会话,以便我们不会重复检查登录用户的cookie,然后在没有会话的情况下检查cookie,但仍然存在。)有更好的方法吗?
你如何在你的数据库中存储密码?您应该以将它们暴露给用户(例如通过cookie)的方式存储它们,不会泄露任何信息。 –
@arxanas它们使用'do_hash'作为SHA1 + CodeIgniter中的硬编码密钥存储在数据库中。 http://codeigniter.com/user_guide/helpers/security_helper.html - 这使用SHA1和自定义分配的加密密钥。我正在考虑将用户名和CI加密密码存储在cookie中(如果支持本地存储),但我不确定这是否安全? –
它会的,但'SHA1'已被普遍接受为不如像'bcrypt'这样的解决方案。虽然这可能不会成为一个问题,除非你有一个庞大的客户群,你应该记住它。如果您不喜欢使用Cookie,则可以使用会话并将数据放在用户无法触及的地方。 –