2010-01-14 2 views
3

레일스는 레일 로그에서 중요한 매개 변수를 필터링하기 위해 filter_parameter_logging을 제공합니다.레일 로그의 요청 URL 또는 부분 모두 필터링

JSONP API를 사용하는 경우 일부 중요한 정보가 URL에있을 수 있습니다. 로그에서 요청 URL을 필터링하는 방법이 있습니까?

답변

6

참고 : 대답은 레일스 2.x ~ 3.0에서 작동하도록하는 방법이었습니다. Rails 3.1에서 시작하여 config.filter_parameters으로 설정하면 Rails는 쿼리 문자열의 민감한 매개 변수도 필터링합니다. 자세한 내용은 this commit을 참조하십시오. 내가 그 경우에 생각


, 당신은 그 방법 ActionController::Benchmarking 호출하기 때문에, ActionController::Basecomplete_request_uri을 재정의 할 필요 보이는 라인 출력 : 나는 당신이 초기화에 넣고 수 있다고 생각

Completed in 171ms (View: 35, DB: 7) | 200 OK [http://localhost:3000/] 

을 이 메소드를 오버라이드

class ActionController::Base 
    private 

    def complete_request_uri 
    "#{request.protocol}#{request.host}#{request.request_uri.gsub(/secret=([a-z0-9]+)/i, "secret=[FILTERTED]")}" 
    end 
end 

원하는 부분을 대체하기 위해 정규 표현식을 약간 재생해야합니다.

+0

내 날을 구했습니다. 감사합니다. 나는 필터/보호를 원했던 컨트롤러 내부에서 그 기능을 간단히 정의 할 수 있었고 훌륭하게 작동했다. – nessur

+0

@nessur 헤이, 나는 매개 변수 필터링을 수정하기위한 패치를 보내기 전에이 대답이 꽤 오래되었다고 생각합니다. 이제 config.filter_parameters를 설정하면 로그에서 해당 매개 변수도 필터링됩니다. 자세한 내용은 https://github.com/rails/rails/commit/68802d0fbe9d20ef8c5f6626d4b3279bd3a42d3e 및 http://api.rubyonrails.org/classes/ActionDispatch/Http/FilterParameters.html을 참조하십시오. 그렇지 않다면 Rails에 버그를 제기하여 해결할 수 있도록하십시오. – sikachu

+0

고마워.하지만 내 문제는 내가 유지하고있는 레일즈 2.3.12 앱에있다. 우리는 다른 Rails 3.2x 애플 리케이션을 가지고 있는데,이 필터링은 훌륭합니다. 나는 누군가가 Rails 2.3에 대한 더 많은 버그 수정을 발표 할 것이라고 생각하지 않는다. :) 건배! – nessur

2

슬프게도 레일 3에서 더 이상 작동하지 않습니다. 쿼리 매개 변수를 포함하는 경로는 Rack::Request에서 상속받은 ActionDispatch::Request에서 비롯됩니다.

class ActionDispatch::Request 
    def fullpath 
    @fullpath ||= super.gsub(/secret=[^&]+/, 'secret=[FILTERED]') 
    end 
end 

나는 쉽게하지 거기에 문자 나 숫자 문자를 가질 수있는 매개 변수 이후 정규식에 [^&]를 사용하여 전환 : 여기 당신이 초기화에 던질 수있는 관련 monkeypatch입니다.

+0

이것은 효과가있다. 감사! 이것이'rails 3.2.11'에서 작동하지 않는 것을보고 놀랐습니다. 바라기를 이것은 메인 레일 젬으로 만들 수 있기를 바랍니다. –