【问题标题】:Filtering sensitive information from DelayedJob logging从 DelayedJob 日志中过滤敏感信息
【发布时间】:2013-07-03 05:19:24
【问题描述】:

Rails 3 在config/application.rb 中有一个很好的功能,它允许过滤敏感信息,例如密码,以免出现在日志中,如下所示:

config.filter_parameters += [:password, :creditcardnum]

但是,我的问题在于如何从其他地方的日志中过滤相同的信息。例如,我正在使用 DelayedJob,即使我的密码从我的开发日志中被过滤掉,它仍然会在 DelayedJob 日志中出现(我想类似的事情也会发生在类似工作的 gems 中):

SQL (14.3ms) INSERT INTO "delayed_jobs" ("attempts", "created_at", "failed_at", "handler", "last_error", "locked_at", "locked_by", "priority", "queue", "run_at", "updated_at") VALUES (blah blah blah...) username: MYUSERNAME@EMAIL.COM\n password: MYPASSWORDHERE\n method_name: :destroy\nargs: []\n"], ["last_error", nil], ["locked_at", nil], ["locked_by", nil], ["priority", 0], ["queue", nil], ["run_at", Wed, 03 Jul 2013 03:07:02 UTC +00:00], ["updated_at", Wed, 03 Jul 2013 03:07:02 UTC +00:00]]

您对此有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 security logging delayed-job


    【解决方案1】:

    我建议只向延迟的工作发送非敏感信息。

    例如,以下代码将完整的user 对象(包括密码或任何其他敏感信息)发送到延迟作业:

    user.delay.activate
    

    为了防止这种情况,首先我们可以准备一个ActivateUserJob

    class ActivateUserJob < Struct.new(:user_id)
      def perform
        user = User.find(user_id)
        user.activate
      end
    end
    

    然后,在需要时将作业排入队列。这样,只有user 的 id 会被显示出来:

    Delayed::Job.enqueue ActivateUserJob.new(user.id)
    

    【讨论】:

    • 嗨@Domon,我很抱歉耽搁了。我想与您跟进此事,看看您能否解释一下::user_iduser_iduser.id 之间有什么区别?我认为 user_id 需要用引号括起来 ("user_id") 来表示与 :user_id 相同的意思,我不知道 user.id 相对于其他两个是什么意思。
    猜你喜欢
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多