【发布时间】:2020-02-27 01:34:12
【问题描述】:
我们有一个 Play 应用,目前使用的是 2.6 版。我们试图通过在用户提供失败密码时延迟向用户发送“登录失败”消息来防止字典攻击我们的登录。我们目前散列和加盐并拥有所有最佳实践,但我们不确定我们是否正确延迟。所以我们在控制器中有:
public Result login() { return ok(loginHtml) }
我们有一个:
public Result loginAction()
{
// Check for user in database
User user = User.find.query()...
// Was the user found?
if (user == null) {
// Wrong password! Delay and redirect
Thread.sleep(10000); <<-- how do delay correctly?
return redirect(routes.Controller.login())
}
// User is not null, so all good!
...
}
我们不确定Thread.sleep(10000) 是否是延迟响应的最佳方式,因为这可能会挂起其他进来的请求,或者使用默认池中的过多线程。我们注意到,在每秒 80 次以上的点击中,Play 框架不会将我们的 HTTP 调用路由到 Routes。也就是说,如果我们收到一个 HTTP POST 请求,我们的应用程序甚至不会将该请求发送到控制器,直到 20 多秒后,但是,如果我们收到一个 HTTP GET 请求,在同一时间段内,我们的应用程序将立即处理该 GET !
目前,我们的 Akka 设置中有 300 个线程作为默认分叉池的最小值/最大值。任何见解将不胜感激。我们运行一个运行 Ubuntu 的 t2.xlarge AWS EC2 实例。
谢谢。
【问题讨论】:
标签: amazon-web-services playframework threadpool