代码之家  ›  专栏  ›  技术社区  ›  Aayush Kothari

什么是阻止Rails中不支持/无效请求的最佳方法?

  •  1
  • Aayush Kothari  · 技术社区  · 6 年前

    在Heroku上运行的Rails应用程序示例。我们每天都会收到某种模式的(似乎是DoS)请求,我想配置中间件来处理这些家伙,而不是Rails应用程序启动来返回 Exception: ActionController::UnknownFormat 或者 Exception: ActionController::InvalidAuthenticityToken 每一个都是。我觉得这不是处理它们的最好方法。

    我实现了一个Rack::攻击,看起来是这样的:

    class Rack::Attack
    blocklist('block ip') do |req|
      ['a.b.c.d','w.x.y.z'].include? req.ip
    end
    
    blocklist('block corrupt paths') do |req|
        req.path =~ /\w*((\.aspx)|(\.php)|(\.txt)|(\.zip)|(\.tar)|(\.rar)|(\.com)|(\.sql))$/
    end
    
    blocklisted_response = lambda do |env|
      # Using 503 because it may make attacker think that they have successfully
      # DOSed the site. Rack::Attack returns 403 for blocklists by default
      [ 503, {}, ['Blocked']]
    end end
    

    虽然它确实阻止了某些类型的批处理请求,这些请求将定期显示在日志中,但它仍然不能很好地完成工作。特别是,我看到每天以突发模式向我们的应用程序发出以下类型的请求:

    • //配置/AspCms_config.asp
    • /主页/favicon.ico
    • /3/法维孔.ico

    每个错误请求和报告都是资源消耗和昂贵的。

    如何更好地处理这些请求?解决方案在于进一步修改regex吗?还有其他的标准我需要读懂吗?

    谢谢。

    1 回复  |  直到 6 年前
        1
  •  0
  •   james2m    6 年前

    你考虑过把你的应用程序放在CloudFlare之类的东西后面吗?根据你的需要,他们有一个免费的计划: https://www.cloudflare.com/plans/