为特定请求延迟 Django HttpResponse
我正在写一个简单的解决方案,用来处理暴力破解登录的尝试。我需要在发送响应之前添加延迟,特别是当有很多次失败的尝试时。你们有什么建议,可以为每个请求添加延迟吗?这个延迟必须是针对每个请求的,这样处理特定资源的线程就不会影响到下一个请求。
谢谢。
编辑:根据这个问题,在Webfaction上使用Apache时,time.sleep会导致对同一资源的下一个请求也延迟。
那么在这种情况下,有什么替代time.sleep的方法吗?
3 个回答
0
HTTP是一种无状态的协议。这意味着每次请求之间没有记忆,无法自动连接起来。为了保持请求之间的联系,我们需要在客户端存储一些会话信息。由于我们无法控制用户的行为,最好的办法是在服务器端记录失败的登录尝试,并对这些账户的登录过程进行延迟处理。
1
如果我说错了请给我点个踩,但我觉得每个线程一次只处理一个请求。所以,如果你想让某个请求处理得慢一点,只需要在那个线程里加个 time.sleep
,这样服务器处理这个请求的时间就会变长,但不会影响其他同时进行的请求。
1
如果你在多线程服务器中延迟响应,你的服务就容易受到拒绝服务攻击(DOS攻击)。攻击者可能会同时发送很多请求,这样你的所有线程就会同时“睡觉”...
如果同一个IP地址尝试的次数太多,最好是让用户输入验证码(CAPTCHA)。
更新: 我会使用Twisted(或者Tornado,但我没用过)作为后台,前面用nginx(而不是Apache)。你甚至可以同时使用Twisted和Django,但你需要写代码来模拟Django的认证和会话功能,并把正确的数据写入数据库。