【问题标题】:How to prevent (hold the refresh button) DoS Attack如何防止(按住刷新按钮)DoS 攻击
【发布时间】:2013-01-28 13:47:27
【问题描述】:

我的网站非常动态,它从数据库中收集数据。当我在测试时,我按下了刷新键并按住了一段时间,服务器宕机了。 (这是一个简单的 DoS 攻击)。如何阻止用户继续点击刷新按钮。 谁能告诉我解决方案。像 gmail 一样,转到 gmail 帐户并按 F5 并按住一段时间。 Gmail 将显示此消息

“很抱歉,您的 Gmail 帐户暂时无法使用。对于给您带来的不便,我们深表歉意,并建议您过几分钟再试一次。您可以查看应用程序状态仪表板了解服务的当前状态。”

谢谢

【问题讨论】:

  • 与一百万用户在 Google 上进行单页加载相比,您的“按住 F5”问题微不足道。因此,您应该尝试着眼于更大的图景。检查您的服务器代码,进行优化并找出导致它崩溃的瓶颈,而不是为单个的、可以忽略的问题找到解决方案。
  • 在 JavaScript 中,您可以有效地提出一个提示,询问用户“您确定吗?”,请参阅this question 的答案。然后在超时后删除侦听器。 (很明显,如果他们关闭了 JavaScript 或没有在浏览器中加载页面,这不会阻止它)
  • @Joseph the Dreamer:我没有将 google 与我的 webApp 进行比较,我的应用程序也没有崩溃。我正在从传感器实时收集数据,这是大量数据,然后我对这些数据进行一些计算,这需要一些时间。例如,如果我按 F5 30 秒,webApp 会关闭一段时间(1-2 分钟)。
  • 请详细说明您的方法,而不是提供模糊的概述。如果您发布实际代码,说明数据流,涉及哪些实体等会更好。

标签: javascript jsp servlets


【解决方案1】:

为什么不使用计数器方法。增加它直到在一个小间隔内达到阈值,如果是,则阻止访问。

它的 JSP 应该是这样的

 <% 
        int refresh;
        if(session.getAttribute("pageRefresh")==null)
             refresh=0;
        else
            refresh = (Integer)session.getAttribute("pageRefresh") + 1;


       session.setAttribute("pageRefresh", refresh); 

       session.setMaxInactiveInterval(10000);

       if (refresh>100)
       {
           //error message or black list client
       }
%>

【讨论】:

    【解决方案2】:

    您必须使用 mod_evasive 或 mod_qos 或 mod_security
    我更喜欢 mod_security modsecurity_crs_11_dos_protection

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-02
      • 1970-01-01
      • 2011-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-13
      相关资源
      最近更新 更多