2011-03-22 3 views
7

나의 proudction rails 앱에는 asp, zip 및 rar 파일을 요청하는 모든 유형의 임의의 공격이 있습니다. Rails는 예상대로 404 페이지를 렌더링했지만, 다음과 같이 RoutingError 스택 트레이스 덤프로 인해 프로덕션 로그 파일이 막혔습니다.생산 로그 파일에서 Rails RoutingError 스택 트레이스 출력을 비활성화하는 방법은 무엇입니까?

제 질문은 : Apache/Passenger의 특정 패턴으로 URL을 차단할 수 있습니까? 또는 최소한 전체 스택 추적을 인쇄하지 않고 오류 자체를 기록하도록 레일스를 구성 할 수 있습니까? 감사!

Processing ApplicationController#index (for 100.222.237.7 at 2011-03-22 10:59:54) [GET] 

ActionController::RoutingError (No route matches "/include/upfile_flash.asp" with {:host=>"www.myhost.com", :method=>:get, :domain=>"myhost.com", :subdomain=>"www"}): 
    passenger (2.2.15) lib/phusion_passenger/rack/request_handler.rb:92:in `process_request' 
    passenger (2.2.15) lib/phusion_passenger/abstract_request_handler.rb:207:in `main_loop' 
    passenger (2.2.15) lib/phusion_passenger/railz/application_spawner.rb:441:in `start_request_handler' 
    passenger (2.2.15) lib/phusion_passenger/railz/application_spawner.rb:381:in `handle_spawn_application' 
    passenger (2.2.15) lib/phusion_passenger/utils.rb:252:in `safe_fork' 
    passenger (2.2.15) lib/phusion_passenger/railz/application_spawner.rb:377:in `handle_spawn_application' 
    passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:352:in `__send__' 
    passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:352:in `main_loop' 
    passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:196:in `start_synchronously' 
    passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:163:in `start' 
    passenger (2.2.15) lib/phusion_passenger/railz/application_spawner.rb:222:in `start' 
    passenger (2.2.15) lib/phusion_passenger/spawn_manager.rb:253:in `spawn_rails_application' 
    passenger (2.2.15) lib/phusion_passenger/abstract_server_collection.rb:126:in `lookup_or_add' 
    passenger (2.2.15) lib/phusion_passenger/spawn_manager.rb:247:in `spawn_rails_application' 
    passenger (2.2.15) lib/phusion_passenger/abstract_server_collection.rb:80:in `synchronize' 
    passenger (2.2.15) lib/phusion_passenger/abstract_server_collection.rb:79:in `synchronize' 
    passenger (2.2.15) lib/phusion_passenger/spawn_manager.rb:246:in `spawn_rails_application' 
    passenger (2.2.15) lib/phusion_passenger/spawn_manager.rb:145:in `spawn_application' 
    passenger (2.2.15) lib/phusion_passenger/spawn_manager.rb:278:in `handle_spawn_application' 
    passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:352:in `__send__' 
    passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:352:in `main_loop' 
    passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:196:in `start_synchronously' 

Rendering /myapp/public/404.html (404 Not Found) 

답변

5

당신이 물건을 잡아 사용자가 선택한 컨트롤러/액션을 렌더링하는 모든 다른 루트 후 모든 경로를 캐치를 추가 할 수 있습니다 것은 :

match '*' => 'errors#not_found' 

것은 당신은 단지 경기 .ASP를 선택할 수 있습니다 또는 당신이 원한다면 어떤 :

match '*.:format' => 'errors#not_found', :constraints => {:format => /(asp|zip|rar)/i} 
+0

감사합니다! 나는 그것을 시도 할 것이다. –

1

레일 4, 5 답 :

match '*any', to: 'not_found#all', via: [:get, :post] 

와일드 카드 매개 변수와 일치 시키려면 여기에 할당 된 이름이 있어야합니다 (이 경우 any).

class NotFoundController < ApplicationController 
    def any 
    Logger.new('log/not_found.log').info(request.fullpath) 
    # To render nothing: 
    # head :not_found #Rails 5 
    # render nothing: true, status: :not_found # for Rails 4 

    #To render 404 page 
    render file: 'public/404.html', status: :not_found, layout: false 
    end 
end 
관련 문제