我有一个收集基本用户信息的表格。在随后的页面上,它要求用户输入“验证”代码,以确保他们可以访问提到的电子邮件帐户。
此外,如果有人在输入验证码之前不小心完全离开了网站,我将提供一个带有唯一 $_GET 变量的链接,以便他们可以验证他们的电子邮件地址。
几个问题:
- 将验证码存储在数据库中客户电子邮件地址旁边的普通站点(例如代码为 12345)中是否有任何危害?
- 是否需要“散列”验证 URL $_GET 变量?我的想法是简单地创建一个 64 个字符的字符串,附加到 URL 的末尾并检查数据库值(再次存储在电子邮件地址旁边)。
我永远不会对用户密码做同样的事情(保持打开未散列)但在这种情况下,正确的方法是什么?
编辑
似乎人们喜欢 GUID 的想法(尽管我不确定它比 64 字符随机生成的字符串更独特)。下面的功能是否足够?
function getGUID(){
if (function_exists('com_create_guid')){
return com_create_guid();
}else{
mt_srand((double)microtime()*10000);//optional for php 4.2.0 and up.
$charid = strtoupper(md5(uniqid(rand(), true)));
$hyphen = "-";
$uuid = "{"
.substr($charid, 0, 8).$hyphen
.substr($charid, 8, 4).$hyphen
.substr($charid,12, 4).$hyphen
.substr($charid,16, 4).$hyphen
.substr($charid,20,12)
."}";
return $uuid;
}
}