因此,我一直在阅读有关通过使用呈指数增长的延迟来限制来自 IP 地址或针对用户的登录请求的领域。这是服务器不会响应的人为延迟,有效地坐在响应上。到目前为止,我几乎没有找到很好地实现这种延迟的方法。
我的选择是:
Thread.Sleep() - 它可以工作,但 DDOS 攻击很容易吃掉 ASP.NET 中所有可用的工作线程
或者
返回类似 429(请求过多)的内容,直到延迟到期。
所以有两种不同的方法,一种是立即回复并将工作交给客户端再试一次,另一种是服务器将坐在请求上并延迟响应。
理想情况下,我希望使用后者,让服务器延迟响应。我已经按照这个答案尝试了 HttpAsyncHandler:https ://stackoverflow.com/a/1614625
我在 HttpAsyncHandler 中发生了 Thread.Sleep,但问题是响应已经返回到客户端。答案说我应该在让响应返回之前阻止 WaitHandle,但我不知道该怎么做,从我所见,我仍然会阻止工作线程同时处理另一个请求一定。
就好像我需要工作线程来接收新请求和接收延迟请求以发出响应。这可以在 ASP.NET Web 窗体中执行吗?MVC AsyncController 看起来非常适合我的需要,但在这种情况下我不能使用它。