如何过滤rails中的参数?

Posted

技术标签:

【中文标题】如何过滤rails中的参数?【英文标题】:How to filter parameters in rails? 【发布时间】:2011-11-06 03:33:53 【问题描述】:

Rails 内置了日志过滤功能,因此您无需记录密码和信用卡。效果很好,但是当您想要触发自定义日志(例如发送电子邮件)并发送您自己的参数或其他数据时,这些参数显然不会自动过滤。我一直在挖掘并试图在 rails 源中找到它,但到目前为止还没有运气。

我已将 rails 配置为过滤参数,如下所示,它可以正常工作以将数据保留在 rails 日志之外:

config.filter_parameters += [:password, :password_confirmation, :credit_card]

在将敏感数据转储到电子邮件、API 调用或自定义(非 Rails)日志之前,您将如何从 params 哈希中过滤敏感数据?

【问题讨论】:

【参考方案1】:

Rails 4+

在 Rails 4+ 中过滤日志的旁注:config.filter_parameters 已从 application.rb 移至它自己的初始化程序。

config/initializers/filter_parameter_logging.rb

Rails.application.config.filter_parameters += [:password]

【讨论】:

记录在这里:guides.rubyonrails.org/…【参考方案2】:

只是添加@tadman 答案:

使用except时,请注意它只会删除参数的***键,例如:

params = 
  search_query: 'foobar', 
  secret_key1: 'SENSITIVE_KEY_1', 
  auth_info: secret_key_2: 'SENSITIVE_KEY2'

params.except(:secret_key1, :secret_key2)

=> :search_query=>"foobar", :auth_info=>:secret_key_2=>"SENSITIVE_KEY2"

使用request.filtered_parameters 将过滤这两个键(如果它们位于 config/application.rb 中)

config.filter_parameters += [:password]

【讨论】:

【参考方案3】:

如果您在 Rails 控制器方法中,为什么不直接调用 request.filtered_parameters

使用已经提供的内容总是一个不错的选择。干杯!

【讨论】:

这其实应该是正确答案,谢谢:) @MohamedSami 这将如何工作?从控制器方法调用 request.filtered_parameters.delete :fat_param 似乎并没有停止 :fat_param 被记录? 谢谢,如果我记得我为什么写这个,我就不知道了?但我认为可以肯定的是,它以某种方式帮助了我,谢谢您的评论【参考方案4】:

tadman 回答正确,但这里有一些附加信息:

在 application.rb 中

config.filter_parameters += [:password, :password_confirmation, :credit_card]

无论您在哪里进行自定义日志记录:

f = ActionDispatch::Http::ParameterFilter.new(Rails.application.config.filter_parameters)
f.filter :order => :credit_card => "4111111111111111"

 => :order=>:credit_card=>"[FILTERED]" 

【讨论】:

它可以工作,但在 Rails 应用程序中推荐的方法是使用 filter_parameters 方法创建一个初始化文件。【参考方案5】:

您始终可以使用except 方法:

params.except(:password, :password_confirmation, :credit_card)

这会将他们从列表中排除。要“过滤”它们,您可以try this approach。

【讨论】:

以上是关于如何过滤rails中的参数?的主要内容,如果未能解决你的问题,请参考以下文章

在 Rails 中过滤敏感信息(参数)的测试

如何从 Rails 应用程序中的一系列电子邮件中过滤掉不活动的电子邮件?

如何在 Rails 中使用下拉列表和 ajax 过滤数据

Rails 5.0.0.beta1 - 从未过滤的请求参数生成 URL 是不安全的

rails 4 中的机架攻击和 Allow2Ban 过滤

如何在 Rails 控制台中根据列格式过滤模型