Mobile 如何防止对服务器的验证码攻击

Mobile 如何防止对服务器的验证码攻击,mobile,sms,sms-verification,Mobile,Sms,Sms Verification,为应用程序构建服务器,在应用程序中注册的步骤之一是输入电话号码验证码。验证码将通过短信发送至手机,需要输入验证码才能继续注册 该应用程序将向服务器发送请求,是否有人可以找到url并继续向服务器发送假手机验证码请求?如何防止攻击?我假设您这样做是为了确认正在注册的电话号码是真实的,并且属于正在注册的人 场景1: -合法用户登记册 -合法用户收到短信 -合法用户将验证码发送到服务器 如果代码与发送的代码匹配,则激活用户 场景2: -攻击者注册 -攻击者没有收到短信,因为他输入的电话号码不是他的 -随

为应用程序构建服务器,在应用程序中注册的步骤之一是输入电话号码验证码。验证码将通过短信发送至手机,需要输入验证码才能继续注册


该应用程序将向服务器发送请求,是否有人可以找到url并继续向服务器发送假手机验证码请求?如何防止攻击?

我假设您这样做是为了确认正在注册的电话号码是真实的,并且属于正在注册的人

场景1:

-合法用户登记册

-合法用户收到短信

-合法用户将验证码发送到服务器

如果代码与发送的代码匹配,则激活用户

场景2:

-攻击者注册

-攻击者没有收到短信,因为他输入的电话号码不是他的

-随机的人收到短信

-攻击者对验证服务器启动DoS并尝试猜测代码

这种情况下的DoS问题可以在尝试X次失败后用简单的块来解决。例如,将每次失败的验证尝试存储到一个表中,当一个帐户有5次失败尝试时,将验证阻止X分钟。这类似于多次无法使用用户名和密码登录。验证代码必须有足够的可能组合,以便暴力攻击不可行

另一个问题是,您的服务可能会被用来向随机的人发送验证短信。您必须限制每个IP每X时间间隔或类似的注册。您还可以使用验证码来防止自动注册

场景3:

-攻击者注册

-攻击者输入了假电话号码,因此没有人收到短信

-你的短信服务器收到的短信发送失败,所以什么也没发生。用于发送SMS的验证码无效

我希望这有点帮助,我正确理解了你的意图

  • 使用验证码来防止自动化
  • 限制单个数字的频率验证请求,最好使用

  • 不要忘记验证端点也需要安全保护;您必须限制对给定验证码的尝试次数,或者使用足够长的验证码,这样就不重要了。

    如果每个验证码都是唯一的,并且只能使用一次,那么这又有什么关系呢?@OliCharlesworth我猜,如果它们到达服务器,情况也不会太糟,但是,如果有数千条短信发送给一个差劲的手机用户,他可能是一个非常悲伤的用户:)将每小时发送的短信数量限制为1条。在实际发送短信之前,验证码可能是一个好主意,否则一个脚本可以很容易地注册一个新用户/发送短信/注册一个新用户/短信/…我担心的是这个场景3。尽管输入随机数无助于攻击者注册,但这会浪费我的短信配额,因为我将使用付费短信服务,即使号码是随机/不正确的,也会向我收费。@dotNET也许您可以先要求电子邮件验证,然后才发送短信。这样做你就更难了。您还可以对每个IP的Account创建进行评级。我要接的第二条电话。无法使用电子邮件地址,因为我的大多数用户都没有电子邮件地址。:)酷,谢谢你的主意。我将为每个IP设置最大尝试次数(10次),如果失败时间超过最大次数,IP将被禁止24小时。每次成功操作都将重置尝试计数器。