注册新帐户时,用户名的HTTP状态代码已存在

Gre*_*reg 6 security http

客户端将以下内容发送给 POST /account/register

{
  "username": "user123",
  "password": "pa55w0rd"
}
Run Code Online (Sandbox Code Playgroud)

服务器尝试创建新帐户,但发现用户名已被占用.

最合适的HTTP状态代码响应应该是什么?

但我想409 Conflict这意味着客户端意识到用户名存在,这可能是一个安全问题?或者仅仅是基于网站类型的可见性情况,这取决于具体情况?

Luk*_*lor 15

我建议返回错误409 Conflict

由于与资源的当前状态冲突,无法完成请求。仅在预期用户可能能够解决冲突并重新提交请求的情况下才允许使用此代码。


Jhu*_*eno 10

如果您担心隐私,无论帐户是否已创建,请确保以相同的方式进行响应,在这种情况下, 204202可能是最合适的状态代码。
为了不让前端的用户感到困惑,您可以显示一条通用消息,内容类似于“如果您没有帐户,您将在接下来的几分钟内收到一封确认电子邮件,如果您没有收到电子邮件,请尝试忘记密码”。
根据您想要采取的措施,您可能希望在后台进程而不是在主/请求线程中创建帐户,否则攻击者可以分析端点的响应时间并推断帐户是否已创建在响应时间上,这是因为实际创建帐户的过程可能比仅检查帐户是否存在并返回需要更多的时间。

在这两种情况下以相同的方式响应是确保攻击者无法找出谁已在您的系统中注册的唯一方法。