1

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

将它们发送到 AsyncContext 似乎过于占用处理器资源,并且超时会自动将相同的请求重新发送回它开始的位置。这实际上可能有助于 DOS 攻击。

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

我在这里并没有真正进行身份验证,因此身份验证协议/前端没有用。我只是在验证满足特定标准的模式的连接参数。我知道 TCP/IP 会通知,但如果我可以静默断开无效的访问尝试并让它们挂起,那将是理想的。

4

4 回答 4

2

如果您收到来自同一 IP 的可疑重复请求,您可以引入升级延迟:

Thread.sleep(n);

其中 n 将每个后续事件翻倍。

于 2013-01-06T21:55:55.940 回答
2

我认为,如果您检测到傻瓜游戏,最好在一段时间内阻止他们的 ip。只需添加他们的 ip 就很容易/etc/hosts.deny(它适用于许多 unix 守护进程,但我不确定它是否也适用于 java 进程,我认为它应该可以工作,因为它被 tcp 守护进程本身使用)。man 5 hosts.deny在命令行给出一些提示(或查看此在线链接)。

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

于 2013-01-06T22:05:46.650 回答
1

我实际上认为 AsyncContext 可能是比在同步请求上休眠更好的解决方案。

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

于 2013-01-06T22:14:04.847 回答
1

你应该保护在较低的水平。任何涉及 Java 的行为都会比黑客对您造成更大的伤害,因为容器会在每个请求上创建环境。

黑客很可能不会等待响应,因此您不会通过延迟响应来打击他们。

使用nginx或防火墙级别。

于 2013-01-06T22:20:51.430 回答