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