我有一个Rails应用程序受到ScanAlert调用/login.php的攻击,但该应用程序正在抛出500.我想过滤我的网站不支持的任何格式,而不是404。
我最初的倾向是在application_controller.rb中创建一个before_filter,它删除任何:不是的格式:html,:xml或:js,然后渲染404.
但是,最好在路由级别捕获不支持的格式。有没有人以这种方式接近它,你在路线文件中放了什么?
这似乎是一个常见的问题,但我找不到任何解决方案。
答案 0 :(得分:1)
只是将路由映射到不存在的操作应返回404。
尝试将此添加到您的routes.rb
:
map.connect '/login.php', :controller => 'application', :action => 'devnull'
对于更通用的解决方案,将其添加到所有路径的末尾(这样做整齐地为读者练习(提示:with_options
)):
:conditions => {:format => /js|html|xml/}
或来自另一方:
map.connect '/*whocares.php', :controller => 'application', :action => 'devnull'
答案 1 :(得分:0)
如果一遍又一遍地使用相同的URL,则可能需要在生产服务器上添加Apache重写规则,以将URL映射到404页面,以便它永远不会触及Ruby。 Apache rewrite guide
答案 2 :(得分:0)
如果您使用的是宁静路线,则应该使用
respond_to do |format|
format.html
end
这将返回一个401(我认为),这不是一个会出现在你的日志中的错误,而是一个'无法识别的格式'(虽然我可能在确切的代码和消息上错了)。无论哪种方式,它都不需要在您的路由或您的apache设置中进行特殊配置,而是使用约定优于配置。
如果您的路线不安宁,那么您应该能够在路线的末尾添加:格式以使其有效,例如。
map.login '/login.:format', :controller => 'application', :action => 'login'
另外,请注意,尽量不要使用map.connect
,而是使用命名路线,因为它们更清晰,并通过表达路线实际正在做什么来传达意义,尤其是在您的视图中。 (login_path
比其堂兄{ :controller => 'application', :action => 'login' }
)更多,更清洁。
希望这有帮助。