My Rails应用程序经常收到来自黑客扫描漏洞的虚假流量,点击/vb/showthread.php%3C/a
等网址。这些在我们的日志中显示为噪音,我想过滤掉它们或以某种方式处理它们(例如提醒某人扫描尝试)。
是否有Rails或Rack gem已经执行此操作,或者在其他框架中是否有类似的库执行相同的操作?
答案 0 :(得分:1)
rack-attack中间件gem通常足以根据请求的任何属性阻止请求,并提供其他高级功能来处理恶意流量,例如请求限制,阻止列表和请求记录。
答案 1 :(得分:0)
我不确定这是否真的能回答你的问题我觉得自定义过滤器会更好而不是一般的宝石。
我在我的applicaton_controller上添加了一个前置过滤器来处理奇怪的请求,然后你可以提醒并做你想做的事。
class ApplicationController < ....
before_action :filter_hacks #first filter
private
def filter_hacks
if request.format.to_s == 'php'
#do something: email, save report, anything
head(:ok) and return false
elsif #add other filters
end
end
我确信它可以改进,但你可以完全控制你想要阻止的内容以及发生这种情况时该怎么做。
答案 2 :(得分:0)
这是中间件的一个很好的用例。您可以存储已知错误路由的列表,并使用您希望拦截和处理请求的任何逻辑,然后再将其发送到您的应用。我会详细了解如何在Rails guides中使用Rack中间件。
但是可以用类似的东西来实现:
class FilterBadRequest
BAD_PATHS = [
"/vb/showthread.php%3C/a"
]
def initialize(app)
@app = app
end
def call(env)
req = Rack::Request.new(env)
bad_request = BAD_PATHS.find { |bad_path| req.fullpath ~= bad_path }
if bad_request
raise ActionController::BadRequest
else
@app.call(env)
end
end
end
这会引发ActionController::BadRequest
异常,但您可以在应用程序的上下文中重定向或执行其他任何有意义的操作。您需要确保在config
块内的应用程序配置文件中注册中间件,例如通过调用config.middleware.use FilterBadRequest