Phone 网络暴力破解保护数量

Phone number brute forcing protection in web

我最近开始设计自己的 Web-API,我目前的目标是可以用 phone 号码注册来宾用户,但有一个要求:我的数据库不能包含 phone 个重复项。所以我决定我需要一个服务来验证这个案例。这就是我感到有点困惑的地方。

假设我有一个 REST 服务,它检查系统中是否存在输入的 phone 号码。
它使用 phone 数字(如 +7-913-XXX-XX-XX)并根据数据库中的 phone 数字 presence/absence 生成布尔值。

如果我实现这个逻辑,那就太天真了,这样我就可以向这个服务发送尽可能多的请求,并找出与这个系统相关的真实数字。总之,总有一天数据会被泄露。

阻塞特定IP地址的方式(由于一台机器的高RPS)显然不似乎是最佳解决方案,因为可以通过不同的 IP 实现。

我的问题如下:

  1. 我是否错过了我目标中的任何概念(错误的方向或错误)?如果需要在数据库中检查,我应该如何以另一种方式检查phone号码?
  2. 如果没问题,是否甚至 可能 避免这种暴力破解,所以我的数据(不仅是 phone 数字,还有任何一般的个人数据)都会是否安然无恙?
  3. 如果不是,有什么通用的方法可以让暴力破解变得不那么容易吗? (除了上面的方式)
  4. -开发者如何处理Java? Spring-framework 在这种情况下是否有帮助?

如果您有一个不受限制的端点来告诉您号码是否已注册,则无法完全解决此问题。我建议您倒回去看看为什么需要这种精确的功能。

将其与防止密码重置用于电子邮件地址枚举进行比较,其中“正确”的方法是响应“如果此地址已注册,您将收到重置通知”,这不会泄露任何信息。你可以用短信做类似的事情,让他们进入下一阶段。

虽然您可以单独通过 IP 进行限制,但通过经过身份验证的用户进行限制要容易得多,因此如果可以的话,请确保只有授权的客户端才能发出此请求。

的回答帮助我针对我的情况提出了以下方案(对我来说,在用户注册期间的暴力破解方面似乎足够公平):

  1. 客人输入“注册按钮”
  2. 客人输入phone个号码
  3. 验证码发送到这个号码(不管db里有没有)
  4. 客人输入他phone的验证码。
    • 如果验证码错误->错误;
    • 如果错误N次-> 错误没有权限继续处理(“超出限制。再试一次”或smth);
    • 如果验证码没问题,那么用户会收到适当的令牌,系统可能会创建一些数据来将此会话标识为唯一的东西
  5. 现在我们有了一些权限,看看是否存在经过验证的phone号码
    • 如果存在,请提供一些“下一步做什么”- 选项(例如恢复密码)
    • 如果没有,请提供空白以填写个人数据并注册用户

我知道我错过了很多步骤和验证的东西,但我得到了关键概念:首先应该进行验证,然后才允许以某种方式在系统中检查这个 phone。