2011-03-22 12 views
7

Benim gururlu raylar uygulamasında, asp, zip ve rar dosyaları için isteyen tüm rasgele saldırı türleri var. Rails, beklendiği gibi 404 sayfa render, ancak benim üretim günlüğü dosyası aşağıdaki gibi RoutingError stacktrace dökümü ile sıkıştı.Üretim günlük dosyalarında Rails RoutingError stacktrace çıktı nasıl devre dışı bırakılır?

Sorum şu: URL'leri Apache/Yolcu'ndeki belirli kalıplarla engelleyebilir miyim? Ya da en azından Rails'i sadece hatanın kendisini günlüğe kaydetmek ve tüm stacktrace'i yazdırmamak için yapılandırabilir miyim? Teşekkürler!

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) 

cevap

5

Bu şeyi yakalamak ve sizin seçtiğiniz bir kontrolör/eylem kılabilecek diğer tüm yolları sonuçta rotayı bir catch ekleyebilirsiniz:

match '*' => 'errors#not_found' 

Hatta sadece maç .asp seçebilir ya da isterse ne olursa olsun:

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

Teşekkürler! Bir deneyeyim. –

1

Raylar 4 ve 5 cevap:

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

Bir joker karakter parametresini eşleştirmek için, bu durumda - any - atanmış bir ada sahip olmalıdır.

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