当用户选择记住我功能时,我将其用户名和ID保存在cookie中。然后,当用户返回到站点时,我检查数据库的用户名和ID以确保用户是合法的。接下来通过将cookie数据存储在会话变量中来登录用户。这是记住和登录用户的正确方法吗?将用户信息保存在Cookie中
回答
Cookie不是一种非常安全的数据存储方式。 Cookie可以由用户修改,并可能导致某人“黑客入侵”您的网站。我会建议在cookie中存储一个字符串,这是一些散列的东西。还将来自cookie的散列字符串存储在数据库中。通过这种方式,当用户返回到站点时,您会检查cookie是否已填充,并将其与数据库中的哈希值进行匹配,然后查找谁拥有哈希值。如果一切合法,登录他们。
数据库设置
secretKey PK varchar
userid (could be unique) int
validUntil int or date/time
//If userID is unique you will have to remove this row from the
// database when a new key is made for the user, This would then mean
// that a user would only be allowed to be rememberd on one computer
伪
//User logs in with remember me
//set cookie to something like md5(userid,username,timestamp)
//store the md5 in the database layout
//User Returns to site
//check to see if cookie is set
//if cookie set
//find md5 in database which is logged with user id
//if found and not yet expired log in
//else show login page
//if cookie not set show login page
在有效期至字段中,您将其设置为如2星期内登录。一旦有效期已过,请不要让该密钥正常工作,并确保cookie已过期。
查询,以检查登录
SELECT * FROM了rememberMe其中key = “//把MD5这里” 和validUntil>时间()
好吧,我明白你在说什么,但我要如何处理validUntil场?当日期过去后我该怎么办? – user532493
立即看到新帖子 – bretterer
这个secretKey字段应该与我的所有用户在表中,还是应该有一个用于secretKey的新表? – user532493
号
这取决于到底有多安全你想得到。以下是您可以做的一些事情(部分或全部)以提高安全性:
- 不要在cookie(用户名/ ID /等)中存储任何特定的内容。使用随机生成的废话(令牌)。
- 在你的数据库,你可以有一个令牌< - >用户映射
- 检查令牌对你的数据库并登录时,有一个匹配
- 销毁令牌(标志为“消耗”,或许用户稍后会被删除,不管你决定什么,令牌都不应该再起作用了)。
- 使用
https
如果用户发送一个陈旧的令牌(即一个,是不是在你的数据库,或已被标记为消费)只发送的cookie,登录等 - 这意味着它令牌可能已被泄露。在每个对经过身份验证的用户的请求中(甚至可能使用ajax),将它们登录的令牌(可以存储在会话中)与一个陈旧的令牌尝试列表进行比较。如果匹配,这意味着认证用户可能劫持了令牌。踢出来。
好的,非常感谢你的所有建议。 – user532493
- 1. 将登录信息存储在Cookie中
- 2. 保存会话和cookie中的信息
- 3. 将temparay信息保存在内存中
- 4. C#Cookie未保存其信息
- 5. 将LastModified日期保存在用户详细信息中
- 6. 将用户信息保存在HTML python中任何地方
- 7. 将信息保存在本地RealmList中
- 8. 将信息保存在IO系统中
- 9. 将信息保存在数组中
- 10. 使用MyBatis将用户信息保存到MySQL中
- 11. Cookie不在php中存储信息?
- 12. 在cookie中存储详细信息
- 13. 使用ETag将cookie信息存储在浏览器中
- 14. 保存密码/用户名信息
- 15. 如何“保护”存储在cookie中的信息?
- 16. 将用户配置文件信息保存在与用户登录信息相同的数据库中
- 17. 在应用程序设置中保存用户信息
- 18. 用NodeJs在MySql中保存用户信息
- 19. 如何在应用程序中保存用户信息
- 20. 如何使用javascript保存信息而不使用Cookie
- 21. 使用UWP将信息保存到SOAP
- 22. 将信息保存在页面顶部
- 23. 如何将信息保存在c#
- 24. 将用户帐户信息存储在Windows Azure表中
- 25. iPhone:将用户数据保存在plist,SQLite或cookie中?
- 26. 将OAuth访问令牌保存在用户Cookie中可以吗?
- 27. 将用户的oauth密钥保存在cookie中
- 28. 如何将用户ID保存在登录cookie中?
- 29. 如何将认证用户保存在django的cookie中?
- 30. 保持用户信息
http://stackoverflow.com/questions/2594960/best-practice-to-implement-secure-remember-me –