0

アプリケーション コントローラでロギング メソッドを作成しています。次の設定をしていますが、何らかの理由でパラメーター フィルターがパスワードをフィルタリングしていません。何が欠けている?アプリが安全で、すべてのパスワード パラメーターがフィルター処理されていることを確認するにはどうすればよいですか?

config/applicaton.rb

  # Configure sensitive parameters which will be filtered from the log file.
  config.filter_parameters += [:password]

アプリケーション コントローラ

  before_filter :record_activity

  def record_activity(note = nil)
      @activity={}
      @activity['user'] = current_user
      @activity['note'] = note
      @activity['browser'] = request.env['HTTP_USER_AGENT']
      @activity['ip_address'] = request.env['REMOTE_ADDR']
      @activity['controller'] = controller_name 
      @activity['action'] = action_name 
      @activity['params'] = log_filter(params.inspect)
      p @activity
  end

出力端子

    15:39:38 web.1    | 
{"user"=>nil, 
"note"=>nil, 
"browser"=>"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:20.0) Gecko/20100101 Firefox/20.0",
 "ip_address"=>"127.0.0.1", 
"controller"=>"sessions", 
"action"=>"create", 
"params"=>"{\"utf8\"=>\"✓\", \"authenticity_token\"=>\"dYofOQ64sTajNVn2JiJWVM+E3kz5jCGazrYBObukBAQ=\", 
\"user\"=>{\"email\"=>\"user@domain.com\",
 \"password\"=>\"thepasswordexposed\",
 \"remember_me\"=>\"0\"}, 
\"commit\"=>\"Login\", 
\"action\"=>\"create\", 
\"controller\"=>\"sessions\"}"}

*編集: * 以下を追加しましたが、それでも動作しません。推奨事項はありますか?

  def log_filter(hash)
    filters = Rails.application.config.filter_parameters
    f = ActionDispatch::Http::ParameterFilter.new filters
    f.filter hash
  end

36行目のエラー...

NoMethodError at /users/sign_in    
undefined method `each' for #<String:0x007fa0280b3a68>

36     f.filter hash

答え:

私の解決策は次のとおりです.inspectを削除する必要があり、動作し始めました。

  def record_activity(note = nil)
      @activity={}
      @activity['user'] = current_user
      @activity['note'] = note
      @activity['browser'] = request.env['HTTP_USER_AGENT']
      @activity['ip_address'] = request.env['REMOTE_ADDR']
      @activity['controller'] = controller_name 
      @activity['action'] = action_name 
      @activity['params'] = params
      p @activity
  end
4

1 に答える 1