email - 邮箱验证码是否需要过期?
问题描述
我已经注册了一个 GitHub 帐户来测试他们的电子邮件验证过程。所以:
他们给我发了一封带有链接的电子邮件,其中包含我的用户名和 40 个字符的代码,例如: https ://github.com/users/USERNAME/emails/120066679/confirm_verification/47889d71648523e5d99db5b969f59809c2715fb6
我没有点击链接
4 天后,我又给我发了一封(提醒),我必须验证我的电子邮件,其中包含另一个不同的 40 字符代码的链接
那么,更改 40 字符代码的目的是什么?我记得,其他服务无论如何都会使验证码过期。如果验证链接中已经有用户名,真的需要这样做吗?在暴力破解的情况下,我可以计算与特定用户相关的失败尝试并阻止它,对吗?
emails/120066679
PS 也很有趣, in 链接的目的是什么?(这两个字母相似)
解决方案
验证码快速过期是最佳做法的原因有多种。
如果认为使用验证码进行保护是合适的,那么最安全的做法是使其不仅足够复杂,而且在最短的时间内有效。如果你只让代码在需要的时间内工作(通常很短),你就会降低有人滥用它的风险。(例如,有人可以以编程方式“猜测”代码——这个练习的时间越多,成功的机会就越高。)
此外,存储此类数据效率不高。它使用过一次,不包含任何实际信息,一旦使用,就可以“扔掉”。存储任何在存储时不会增加价值的东西不是一个好习惯。
此外,用户不立即/很快使用代码的情况非常罕见。对于一小部分代码在用户尝试使用它时过期的情况,生成新代码会更有效。
推荐阅读
- matlab - 如何返回包含给定数字的位置索引的行向量
- xml - 添加嵌套的 XML 元素
- css - Change the values of CSS variables at runtime in Typescript
- file - 通过网页从个人计算机共享文件(具有授权访问权限)
- java - 如何在 Spigot/Bukkit 插件中将门户重定向到正确的世界?
- python - 将一组 3 通道图像从 Python 读取到二维数组中以在 C 中使用的有效方法
- react-native - 了解 textInput 并浏览文档
- javascript - 从多个来源异步更新 React 状态
- transactions - 两阶段锁定是否适用于每个事务或整个时间表?
- git - laravel 命令在 git 中找不到错误