我想进行电子邮件确认注册,以便当用户注册时,他或她收到一封带有确认链接的电子邮件。链接类似于:www.site.com/confirm?id=34398df809as8df9
,然后将其与标准aspnet成员资格提供程序中的数据库中的UserId进行匹配。使用UserId作为传递给电子邮件的guid构成任何类型的漏洞或安全威胁?
答案 0 :(得分:7)
GUID 仅是否在链接中思考?如果是这样,那绝对不安全。这意味着一旦攻击者拥有任何人的身份证(例如,通过查找旧邮件),他们就可以随时重置用户的密码。
密码重置链接至少应包含一次性使用时间限制令牌。
答案 1 :(得分:4)
我肯定不会在系统之外的任何东西中使用我的数据库中的主键。创建一个专门用于注册循环的一次性密钥,然后在注册完成后使其无效。
答案 2 :(得分:1)
在我看来,这是不安全的,它可能被滥用(虽然不是很容易,但仍然......!)。 您应该附加一个确认链接,其中包含一个时间戳,其中包含发送电子邮件的时间并使用某些自定义逻辑进行加密,该逻辑将包含user_id的计算散列以及单个字符串中的时间戳,如果您想要放入其他内容,则为其他内容。
添加时间戳时,您可以添加一个验证,确认该确认链接必须在24或48小时内使用,否则您必须生成一个新的。
由你决定但普通的Guid不是一个好主意。