由于暴力攻击,锁定用户的正确 http 状态是什么?

What's the right http status of locked user due to brute force attack?

在暴力攻击的情况下,对于锁定的用户,REST api 应该 return 的正确状态代码是什么?实际上,当用户在最后 3 分钟内 3 次密码失败时,将锁定其帐户。

如果他第四次尝试登录,它会收到一个 {"success":"false"} 的响应,状态码为 401。这是否正式正确?

我是茶壶

如果您确定您的应用程序受到攻击,您可以return418(我是茶壶)并使用“短而粗” 响应负载中的消息。

未经授权和禁止

用于 HTTP 身份验证(无状态并在 Authorization header) use 401(未授权)中发送凭据以指示已拒绝该请求的凭据。

假设凭据有效但用户帐户被锁定(或处于阻止服务器接受请求的任何其他情况),您可以使用 403 (Forbidden) and a descriptive message in the payload. Quote from the RFC 7235:

A server that receives valid credentials that are not adequate to gain access ought to respond with the 403 (Forbidden) status code.

403 禁止

403 的意思是“是的,我知道你,你的证书甚至可能是有效的,但无论如何我都会拒绝你”。无论是由于锁定、您的 IP 被禁止、月相不正确等等,您都可以使用它来表示请求因此无效。

帐户锁定并不总是最好的解决方案,因为有人很容易滥用安全措施并锁定数百个用户帐户。事实上,一些网站经历了如此多的攻击,以至于它们无法执行锁定策略,因为它们会不断地解锁客户帐户。 有关详细信息,请参阅 OWASP Blocking Brute Force Attacks

如果您的服务器检测到太多请求并且您不想永久阻止客户端,您应该发送状态代码:

429 请求过多

HTTP 429 请求过多响应状态代码表示用户在给定时间内发送了过多请求(“速率限制”)。

此响应中可能包含 Retry-After header,指示在发出新请求之前要等待多长时间。

https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429