我注册了一个GitHub帐户来测试他们的电子邮件验证过程。因此:
-
他们给我发了一封带有链接的电子邮件,其中包含我的用户名和40个字符的代码,比如:https://github.com/users/USERNAME/emails/120066679/confirm_verification/47889d71648523e5d99db5b969f59809c2715fb6
-
我没有跟随链接
-
4天后,他们又给我发了一封(提醒(,我必须验证我的电子邮件,其中包含另一个40个字符的链接代码
那么,更改40个字符代码的目的是什么?我记得,其他服务,无论如何都会过期验证码。如果验证链接中已经有用户名,那么真的需要这样做吗?在暴力的情况下,我可以计算与特定用户相关的失败尝试并阻止它,对吧?
第页。S.同样有趣的是,emails/120066679
在链接中的目的是什么?(两个字母相似(
验证码快速过期是最佳做法的原因有几个。
如果使用验证码进行保护被认为是合适的,那么最安全的做法是使其不仅足够复杂,而且在最短的时间内有效。如果你只让代码在所需的时间内工作(通常很短(,你就可以降低有人滥用它的风险
此外,存储此类数据的效率也不高。它只使用过一次,不包含任何实际信息,一旦使用,它就可以";扔掉";。存储任何在存储时不会增加价值的东西不是一个好的做法。
此外,很少有用户不立即/很快使用这些代码。对于在用户尝试使用代码时代码过期的少数情况,生成新代码更有效。
电子邮件验证链接的目的是确保您确实拥有该电子邮件。大多数验证链接只是包含一些秘密,它们会通过你的方式发送出去,只有掌握了这些秘密,你才能验证电子邮件地址。
他们更改代码的原因是它可能过期了。在这种情况下,您无法激活该帐户,因此他们向您发送了另一个帐户,以备您继续。
如果他们不发出这样的秘密呢?
在这种情况下,没有什么可以阻止攻击者";验证";他们实际上无法控制的电子邮件。他们只需使用插入的用户名访问url并激活帐户即可。
普通用户不会这么做,但垃圾邮件发送者可能会这么做。
对于暴力:如果秘密足够随机,并且密钥空间足够大,那么尝试猜测它是愚蠢的。
我们可以假设这是一个随机的40十六进制字符数,它给出了:
16**40 == 1461501637330902918203684832716283019655932542976
它的可能值。可以肯定地说,在不久的将来没有人会猜测这个数字。