网络中的电话号码暴力保护



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

假设我有一个REST服务,它检查系统中是否存在输入的电话号码
它消耗电话号码(如+7-913-XXX-XX-XX(,并根据数据库中电话号码的存在/不存在产生布尔值。

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

阻止特定IP地址的方式(由于一台机器的RPS很高(显然似乎不是最好的解决方案,因为有方法可以通过不同的IP。

我的问题如下:

  1. 我是否错过了目标中的任何概念(错误的方向或smth(?如果需要在数据库中检查,我应该如何在中以另一种方式检查电话号码
  2. 如果可以的话,是否有可能避免这种暴力行为,从而确保我的数据(不仅是电话号码,还有任何个人数据(的安全
  3. 如果没有,有没有什么通用的方法可以让暴力变得不那么容易?(以上方式除外(
  4. Java开发人员如何处理它?Spring-框架在这种情况下有帮助吗

如果您有一个无限制的端点,它告诉您是否注册了一个数字,那么没有办法完全解决这个问题。我建议你倒带一点,看看为什么你需要这个精确的功能。

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

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

Synchro的回答帮助我针对自己的情况提出了以下方案(对我来说,在用户注册过程中使用暴力似乎足够公平(:

  1. 客人进入"注册按钮">
  2. 客人输入电话号码
  3. 验证码发送到此号码(无论数据库中是否存在(
  4. 客人通过手机输入验证码。
    • 如果验证码错误->误差
    • 如果出现N次错误->错误,没有继续处理的权限("超出限制。请重试"或smth(
    • 如果验证码正常,则用户会收到适当的令牌,系统可能会创建一些数据来将此会话标识为唯一的
  5. 现在我们有了一些权限,可以查看是否存在已验证的电话号码
    • 如果它存在,提供一些"下一步该做什么"-选项(例如恢复密码(
    • 如果没有,请提供空白以填写个人数据并注册用户

我知道我错过了很多步骤和验证内容,但我明白了关键概念:验证应该首先完成,只有在之后,我们才允许以某种方式在系统中检查这款手机。

相关内容

  • 没有找到相关文章

最新更新