gpt4 book ai didi

ruby-on-rails - 使用敏感信息(如密码)rails 保护数据库列

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

我有一个 Rails 应用程序,它像很多 Rails 应用程序一样,有用户。在我的用户模型中,我有 passwordsalt 列,等等。有什么方法可以防止这些在我执行操作时出现,例如 debug @user 或当我呈现 JSON 时?

当然,我可以确保在每次使用它时都忽略它们,但是有没有一种方法可以确保它们不会出现在任何地方?

也许它们可以是私有(private)领域?它们只在我的 User 模型和我的 Session Controller 中需要,但我可以在 User 中创建一个方法,将给定的密码与正确的密码进行比较一个,然后只有“用户”模块中的变量可访问。这会有帮助吗,或者它们是否仍会在这两个地方(和其他地方)呈现?

最佳答案

很好的问题,有几点需要考虑:

  1. Are you looking to "privatise" the values in the model or in the Rails Core?
  2. Will you need to access these attributes in any specific circumstances? (IE are they always private?)
  3. How will the private methods be populated? Will they ever change?

老实说我不知道​​答案。由于感兴趣,我做了一些研究。以下是一些资源:

共识似乎是,如果您采用 Rails 模型,并应用每次填充它时的逻辑,它的属性将成为您的实例方法可以开始在模型本身内私有(private)化这些方法。

例如……

#app/models/user.rb
class User < ActiveRecord::Base
private :password, :password=
private :salt, :salt=
end

似乎让您能够在您的模型中将某些方法设为私有(private),这将回答您一半的问题。但是,它仍然存在ActiveRecord 每次都拉取记录的可能性,这可能是一个危险。

我对此进行了调查,发现有一些方法可以操纵 ActiveRecord 以防止它拉取不需要的数据:

此资源推荐使用 active_record_serializers .这似乎专门针对 JSON,但更符合正确的 rails (即定义我们从 ActiveRecord 查询返回哪些数据的能力)。

#serializer
class UserSerializer < ActiveModel::Serializer
attributes :username, :created_at
end

#controller
render json: @user, serializer: UserSerializer

还有一个建议ActiveRecord Lazy Attributes - 向 ActiveRecord 规定加载哪些属性:

#app/models/user.rb
class User < ActiveRecord::Base
attr_lazy :data
end

最后,你总是有 good ol' default_scope :

#app/models/user.rb
class User < ActiveRecord::Base
default_scope select([:id, :username])
end

关于ruby-on-rails - 使用敏感信息(如密码)rails 保护数据库列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32754037/

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