问题描述
|
香港专业教育学院一直在我的网站上征求一些反馈,我收到的一条评论是
\“我通过email@email.com注册,并设法通过http://www.mysite.co.uk/activateuser.php?email=email@email.com激活了我的帐户
您需要校验和才能停止它。\“
谁能详细说明一下,以及如何在激活中实现它们?
从理论上讲,如果我要在数据库中创建一个名为“ rand_key \”的行,并且当用户注册一个随机密钥存储在该列中时,我是否可以将其用作激活而不是电子邮件?从而使其变得难以猜测?
解决方法
您需要创建一个唯一的用户密钥,该密钥不应与用户数据相关。通常,您可以执行一些操作,例如对随机生成器函数的输出进行哈希处理,以使其唯一并使用它。然后,将它们指向链接:
http://www.mysite.co.uk/activateuser.php?userid=generation-unique-hashed-key
该唯一的用户密钥应作为额外字段添加到存储用户信息的表中,或以其他方式与用户相关。通过使密钥与用户数据无关,可以确保没有人能发现用户的密钥并恶意激活/执行其他操作来代替您的用户。
然后,在某些情况下,您应该在到达时测试用户密钥:
尚未授权-授权
已经授权-某些错误
错误的钥匙-某些错误
另外,应该有一个与您的用户相关联的到期日期,在此日期之前,您只需停用用户及其密钥即可。
, 该人员表示,您可以通过转到该URL并将电子邮件地址放入thr URL来激活您的地址。您可以这样做,而无需实际获取激活电子邮件。
通过使用校验和,您可以迫使用户单击该链接。例如。
Activate.php?email=aaa@bbb.com&check=A1234b23
在发送电子邮件时,您将生成一个随机代码。将此存储在数据库中的某个位置。将其附加到给定用户的URL。当用户单击链接时,您检查代码是否与为该电子邮件地址存储的代码匹配。如果匹配,请验证电子邮件。否则不要。
,
理论上,如果我要创建一个行
在我的数据库中以及当
用户注册存储一个随机密钥
在专栏中,我可以使用这个吗
作为激活而不是
电子邮件?从而使其变得难以猜测?
是。请记住,您不一定要像唯一的随机数那样多(为了避免两个电子邮件地址意外获得相同的激活码)。
您可以执行以下操作:
$key = mt_rand().\'-\'.uniqid(\'\',true);
echo \'http://mysite.com/activate?key=\'.urlencode(base64_encode($key));
那将很难猜到并且将保证是唯一的。