gpt4 book ai didi

security - Rails has_secure_password : is it actually hashing the password in the DB?

转载 作者:行者123 更新时间:2023-12-02 03:36:28 25 4
gpt4 key购买 nike

使用典型的 Rails 4.1 应用程序 has_secure_passwordUser型号有 password_digest数据库中的列。当我创建一个新用户时,我仍然可以在控制台中访问明文密码:

# in rails console
> u = User.new(email: "test@test.com", password: "password")
> u.save
> u.password => "password"
> u.password_digest => "xjdk..."

但是,当我关闭控制台 session 并开始一个新的 session 时,我无法再检索明文密码:
# close above console session and open a new one
> u = User.find_by(email: "test@test.com")
> u.password => nil

我假设明文密码只能在第一种情况下检索,因为它存储在内存中并且当我调用 u.password => "password" 时它是从内存中检索值,而不是数据库。

一直以为 has_secure_password将(盐+密码)存储为散列,我认为这意味着理论上不可能(如果我可以使用该术语)反转 password_digest并获取原始密码。

我只是确保我假设密码存储为真实哈希(即无法检索原始密码)是有效的。我已阅读 Rails has_secure_password API但它没有澄清我的问题。

最佳答案

你是对的——数据库只保存散列密码,而不是密码本身。您可以通过使用 read_attribute 直接访问数据库来确认这一点。方法( http://www.rubydoc.info/docs/rails/3.0.0/ActiveRecord/AttributeMethods/Read ):

> u = User.new …
> u.read_attribute(:password_digest)
=> # Some hash
> u.read_attribute(:password)
=> nil

顺便说一句,还要确保您的 User模型没有 password柱子。否则它会保存 password直接,违背了对密码进行散列的目的。

关于security - Rails has_secure_password : is it actually hashing the password in the DB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23205465/

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