我将使用AWS Cognito用户池产品作为应用程序的用户目录,并有几个问题:
答案 0 :(得分:15)
经过几个小时的搜索,我在源代码中发现了这两个例外:
TooManyFailedAttemptsException当抛出此异常时抛出 用户对给定操作进行了太多失败的尝试(例如,签名) 在)。
HTTP状态代码:400
TooManyRequestsException当用户拥有此异常时,将抛出此异常 对特定操作提出了太多要求。
HTTP状态代码:400
另外,我尝试使用错误的凭据登录来测试限制,在5.尝试后我得到NotAuthorizedException: Password attempts exceeded
异常。
在类似的情况下,我试图强行忘记密码,但在10次尝试失败后,我得到了LimitExceededException: Attempt limit exceeded, please try after some time.
我认为他们就是这样做的。
答案 1 :(得分:11)
是的,Cognito用户池通过使用各种安全机制来防止暴力攻击。节流是其中一种机制。我们不会共享限制,因为它们会动态变化。
答案 2 :(得分:1)
这包含有关Cognito锁定策略的最新文档。
我们允许五次失败的登录尝试。此后,我们开始临时锁定,从1秒开始以指数方式增加时间,每次失败尝试后大约15分钟加倍。在临时锁定期间的尝试将被忽略。临时锁定期过后,如果下一次尝试失败,则新的临时锁定将以持续时间的两倍开始。等待约15分钟而不进行任何尝试也将重置临时锁定。请注意,这种行为可能会更改。
答案 3 :(得分:1)
与其(或除此之外)专注于暴力破解登录端点,我认为忘记密码流程值得关注。
忘记密码电子邮件包含一个6 位代码,可用于设置新密码。
此代码的有效期为 1 小时。 User Pools code validity resource quotas。
在我的测试中,在限制生效之前,我可以在一个小时内为单个用户 5 次尝试设置新密码 (LimitExceededException: Attempt limit exceeded, please try after some time.
)
现在,如果我正确地进行数学计算,则代码有 1000000 个可能的值(从我的测试中,我从未见过以 0
开头的代码,因此可能会更少)。您有 5 次/小时的尝试来猜测密码。因此,您每小时都有 5/1000000*100=0.0005%
机会在不知道密码的情况下成功重置密码。
这是一个小机会吗?好像是这样。
考虑到大规模的暴力破解多个用户同时重试,我晚上应该睡个好觉吗?我不知道!
为了一劳永逸地解决问题,为什么Cognito不能使用更长的难以猜测的代码(我想晚上睡个好觉)。也许这与文本消息中使用相同的代码机制这一事实有关。我希望有官方评论。