是否有一种简单有效的方法来延迟Java Servlet的响应

时间:2013-01-06 21:44:34

标签: java security servlets denial-of-service

当我获得明显的黑客攻击时,我该怎么办?我希望有一种简单的方法可以让他们浪费时间,而不涉及服务器资源。即使延迟几秒钟也可能使蛮力攻击徒劳无功。

将它们发送到AsyncContext似乎处理器密集,并且超时会自动将同一请求重新发送回它开始的开头。这可能实际上有助于DOS攻击。

我正在使用Jetty并且知道DoSFilter,但如果我在检测到犯规时可以延迟响应会更有效,这在我的情况下很容易理解。我认为每次失败的验证/验证尝试都应该以某种方式自动延迟响应。

我不是在这里进行身份验证,因此身份验证协议/前端无用。我只是验证符合特定条件的模式的连接参数。我知道TCP / IP会通知,但如果我可以静默地断开无效访问尝试并保持挂起,那将是理想的。

4 个答案:

答案 0 :(得分:2)

如果您从同一IP获得可疑重复请求,则可能会引发不断升级的延迟:

Thread.sleep(n);

其中n在后续事件中加倍。

答案 1 :(得分:2)

我认为,如果你发现傻瓜游戏,那么在一段时间内阻止他们的ip是更明智的。在/etc/hosts.deny添加他们的ip会很容易(它适用于许多unix守护进程,但我不确定它是否也适用于java进程,我认为应该可以工作因为它已被使用由tcp守护进程本身)。命令行中的man 5 hosts.deny提供了一些提示(或检查this online link)。

BTW,我认为您可以使用Thread.sleep()来暂停servlet,就像在任何普通的Java代码中一样。但是,这可能会导致来自同一调用者的更多请求长时间保持打开状态,从而增加应用程序服务器必须分配和维护的活动资源。因此,如果攻击者可以在多线程中工作,这可能会帮助他阻止你的服务器,因为它将保留所有攻击线程,阻止所有其他用户访问你的服务。

答案 2 :(得分:1)

我实际上认为AsyncContext可能比睡在同步请求上更好。

但是,我认为您必须尝试这两种方案,并实际测量每种情况对cpu使用情况和总吞吐量的影响。

答案 3 :(得分:1)

你应该保护较低的水平。任何Java的参与都会比黑客更容易受到损害,因为容器会在每个请求上创建环境。

很可能黑客不等待回应,所以你不会通过推迟它来击中它们。

使用nginx或防火墙级别。

相关问题