所以,假设我有一个会员基础网站,当用户登录时,我把一个cookie(或一个会话)与一个键值对记住用户是谁。但它只是让我注意我应该使用哪些信息来记住用户以确保其安全。我不能使用username = username或user_id = user_id(因为我的user_id将是1),因为人们可以简单地猜测cookie值是什么并以该用户身份登录。那么我应该使用什么键/值对来识别用户并仍然安全地将他们的信息连接到数据库?感谢。
答案 0 :(得分:1)
如果您因任何原因不喜欢加密,那么更简单的解决方案可能是使用GUID来识别用户。这样,黑客就必须对您的应用程序发起拒绝服务攻击,以便能够运行甚至很小一部分GUID。
如果你想正确地做到这一点,那么你也应该看看http://jaspan.com/improved_persistent_login_cookie_best_practice。
答案 1 :(得分:1)
Ben,您需要关注几种不同类型的攻击。例如,简单地使用私钥加密标识符并不会阻止可以拦截加密值的人简单地将其重播到您的服务器(并且看起来是用户)。此处详细介绍了一些常见的安全风险(以及本页底部的相关链接):
https://www.owasp.org/index.php/Session_hijacking_attack
会话管理可能非常复杂,并且根据您所需的安全级别,您不希望自己解决这个问题,因为您的开发环境/框架可能已经拥有一个比自制解决方案更经过审查的解决方案。这是一个详细说明需要考虑的事情的链接,不幸的是,这个主题比简单的Stack Overflow帖子更多:
答案 2 :(得分:1)
我绝对不是安全方面的专家,但我最近实施了用户管理工具,并且我已经完成了以下工作。
以下是您需要存储在服务器上的内容 - 以便对每个请求进行身份验证。
我在cookie中存储的内容是
如何使用此基本安全性
只需在用户登录时检查用户名/密码等(通常情况下)如果一切正常,请登录用户并生成新的cookiehash并填写上面给出的值。
每个请求都会针对其哈希检查UserId。如果有人给UserId = 4但哈希没有匹配,则自动删除会话并将用户转发到登录屏幕。可能的日志很好地看到人们尝试用你的努力工作的频率。
我希望这会有所帮助。
答案 3 :(得分:0)
您只需使用保留在服务器上的私有加密密钥加密用户ID即可。使用这种方法有几点需要注意:
虽然我不认为这些是主要障碍,但它们可能对您而言,您必须自己评估对您网站的影响。