我的PHP codeigniter网站向用户发送了3种类型的电子邮件,它们是html格式化的,我希望有一个“在浏览器中查看此电子邮件”链接选项。
如何创建合理安全的链接?其中2封电子邮件性质敏感:
新注册:电子邮件显示其详细信息和激活链接
忘记密码:电子邮件显示重置密码的链接
只做这样的事情就足够了吗?:
$code = sha1(mt_rand(10000,99999).time().$user_email);
$link = 'email/view/' . $code . '/' . $user_id . '/';
=> http://mysite.com/email/view/c0acc09c6d00b706e1e511e52f286b1859067047/213/
因此,身份验证将基于随机哈希及其user_id进行。是否值得对用户ID进行哈希处理?
答案 0 :(得分:2)
我不会将user_id包含为URL参数,我只是坚持使用哈希。
只要有人导航到链接,就应该与存储在数据库中的哈希进行交叉检查,如果匹配,则提取与该电子邮件关联的信息(即用户名,电子邮件)。当他们填写表格时,您可以验证他们输入的数据是否兼容。
例如,如果用户忘记了密码,只要他们输入他们的电子邮件地址,我就会将他们的密码重置为随机值(存储为哈希值),并将此存储的哈希值用作其重置中的URL参数电子邮件。
答案 1 :(得分:1)
这应该没问题,我想补充一点,一旦查看了敏感页面,那么删除这些页面第二次使用该哈希值是一个很好的工作 - 当你发送电子邮件时,存储了哈希值在数据库中,当查看页面时检查哈希是否存在,如果是,则允许页面视图,并从数据库中删除哈希,这样如果第二次查看页面,它将无法检查。 (假设他们不需要从该电子邮件中查看两次相同的链接)。