过滤来自DelayedJob日志记录的敏感信息

时间:2013-07-03 05:19:25

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

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

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

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

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]]

你对此有什么想法吗?

1 个答案:

答案 0 :(得分: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)