gpt4 book ai didi

ruby-on-rails - 如何防止 Rails 用户意外验证为错误的用户?

转载 作者:行者123 更新时间:2023-12-04 03:37:38 28 4
gpt4 key购买 nike

具体来说,我编写了一个 Rails 应用程序,其中我使用默认的(在 Rails 2.3.5 中)CookieStore session 存储,并且我在开发过程中发现了一个奇怪的问题。

我自己和其他几个人已经使用这个网站几个星期了,我们每个人都有一个基于用户名和密码的登录名(每个用户自己注册,我将(加盐和散列的)数据存储在数据库中)。我将用户 ID 存储在 Rails session 对象中(因此,存储在浏览器和服务器之间来回传递的 cookie 中)。

这里有一点很重要:因为这是一个内部网站,我将 cookie 设置为最多保留 2 周,以避免用户必须一直登录。

今天我重置了数据库,删除所有用户记录(以及所有其他数据,有意)。一些用户开始重新注册自己,然后一个用户发现他们在删除后第一次访问该网站时,他们自动以不同的用户身份登录!

我想我明白为什么会这样:从该用户的浏览器传递到服务器的用户 ID 现在与我数据库中的不同用户记录相匹配。我最初的想法是“天哪,我没想到会这样!”但我越想越意识到这可能是预期的行为。

我意识到我可以将我的 Rails 应用程序更改为用户 ActiveRecordStore 但在我这样做之前,我想确保我了解这里发生了什么。具体来说,使用 CookieStore session 和让 session 保持事件状态一段时间的组合真的会造成如此巨大的安全漏洞吗?或者我错过了什么? session_id 是否应该在这里提供更多的安全性?

最佳答案

此设置中最大的安全漏洞不是 cookie 长度,而是在 cookie 中设置 user_id。这意味着登录您站点的任何人都可以通过更改该 cookie 以其他人的身份登录!黑客只需按顺序遍历 user_id,登录并查看是否有任何他们想要窃取或滥用的东西。

如果您想推出自己的身份验证,请尝试以下操作:将“ token ”字符串字段添加到您的用户表中。当有人登录时,将此 token 设置为一组随机的数字和字母,并将 that 作为 cookie 返回给用户。 token 应至少包含 32 个字符、字母数字、大写和小写。

现在,当用户转到某个页面时,他们的帐户将通过该哈希而不是他们的 user_id 来查找。值(value)在于哈希更难猜测,并且永远不会重复。当您重置数据库时,您的 user_id 实际上是重复的,导致人们以彼此的身份登录。

更新

@shingara 是正确的,cookie 存储确实已经处理了安全部分,我的错误。因此,user_id 混淆是一次性的,因为您重置了数据库。这不是您在生产环境中会遇到的问题,除非您再次重置数据库。如果重置是曾经的可能性,那么仍然按照我的建议创建 token 。否则,你很好。

关于ruby-on-rails - 如何防止 Rails 用户意外验证为错误的用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4044591/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com