1

在我们的 Web 应用程序中,我们有一个功能可以让用户重置他/她的密码。部分流程需要通过 SMS 发送 OTP。问题是,我们的页面中有一个功能,允许用户重新发送 OTP,以防由于某些原因(短信提供商错误、网络错误等)而没有收到它。在最近的渗透测试中,发现发送 OTP 的后端调用容易受到 DoS 攻击。黑客可以运行它来向用户发送短信。

我们的防火墙中已经有一种机制,可以检测拒绝服务的自动攻击。问题是,防火墙将其归类为攻击有每秒请求的最小限制。(例如每秒 100 个请求,FW 会阻止它,但任何低于它的请求都允许)。

假设黑客做了一个程序以每秒通过短信重新发送 otp,防火墙将无法检测到它。我们可以做的另一个选择是以编程方式处理它,但我们想不出最好的方法来做到这一点。任何人都可以在这方面给我们建议吗?我们不能仅仅限制 OTP 可以重新发送的次数,因为我们担心它对用户体验的影响。

4

3 回答 3

2

您是否查看过现实世界用例中的时间安排?

例如,如果真实用户在按下重试之前需要 20 秒,那么您可以将该限制添加到您的服务中,而真实用户不知道该限制已到位。这并不意味着您不能在此时间之前接受另一个请求,它可能只是排队等待超时过去。

于 2019-07-18T10:00:48.563 回答
1

我想到了两件事:

采用 Macuistin 的想法,但让超时随着时间的推移而增加。我知道我不希望每分钟发 3 条短信。X 条消息后不再发送并让他们联系支持人员。如果这是一个合法用户,那么在收到这么多消息之后,有些事情是不对的,你应该停下来。

在此之前添加一个步骤如何,使用一次性链接向用户的电子邮件地址发送一个链接,单击该链接会将他们发送到页面以输入在该链接上触发的 OTP(可能有一个在那里重新发送链接,这不会触发另一封电子邮件)。

于 2019-07-19T00:29:08.120 回答
0

这通过 WAF 是不可能的,在这里您可以使用Captcha进行失败的尝试。验证码仅在特定限制交叉时弹出。您可以设置 IP、用户 ID 和会话变量的限制。

于 2019-08-14T13:11:49.497 回答