Laravel Breeze中能否自行生成虚假邮箱的邮件验证链接?
问题解答
结论:可以自行生成该虚假邮箱的验证链接
原因如下:
- Laravel的
temporarySignedRoute生成签名的核心逻辑,是基于hash_hmac算法,用应用的APP_KEY作为密钥,对以下关键输入进行哈希编码:- 目标路由名称(Laravel Breeze默认邮件验证路由为
verification.verify) - 用户ID
- 邮箱的SHA256哈希值(
hash('sha256', $user->email)) - 链接的过期时间戳
- 目标路由名称(Laravel Breeze默认邮件验证路由为
既然攻击者满足以下条件:
- 知晓自己注册的虚假邮箱内容,可计算出对应的SHA256哈希
- 能从数据库获取该虚假账号的用户ID
- 持有应用的
APP_KEY
那么完全可以手动复刻签名生成流程:
- 确定路由名称、用户ID、邮箱哈希、自定义的过期时间(比如沿用系统默认的60分钟有效期)
- 使用
hash_hmac('sha256', 签名基础字符串, APP_KEY)生成哈希值,再进行Base64编码得到签名 - 将
id、hash、expires、signature参数拼接至验证路由URL后,即可得到有效的邮件验证链接
该链接会被Laravel的签名验证逻辑判定为合法,因为签名的生成输入与系统生成时一致,且密钥正确,验证时会匹配通过,从而完成虚假邮箱的验证流程。
内容的提问来源于stack exchange,提问作者suzy
相关产品推荐
相关产品推荐

