php - 需要对通过电子邮件发送的 'verification' URL 进行哈希处理吗?

标签 php mysql hash email-verification

我有一个收集基本用户信息的表单。在后续页面上,它要求用户输入“验证”代码,以确保他们可以访问所提到的电子邮件帐户。

此外,如果有人在输入验证码之前意外完全离开网站,我将提供一个带有唯一 $_GET 变量的链接,以便他们可以验证其电子邮件地址。

几个问题:

  1. 将验证代码存储在数据库中客户电子邮件地址旁边的普通网站(假设代码为 12345)中是否有任何危害?
  2. 是否需要对验证 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;
    }
}

最佳答案

只需使用 GUID,然后就不用管它了!如果需要,您可以将其存储在另一个表中。无需对其进行哈希处理。

关于php - 需要对通过电子邮件发送的 'verification' URL 进行哈希处理吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7285332/

相关文章:

php - laravel中数组到字符串的转换

php - 为什么我从 `filesize` 得到如此准确的结果?

php - 可以用 php 将我的文本表单更新为 mysql

java - 未收到来自服务器 : Java.net.SocketException 的响应:recvfrom 失败:ECONNRESET

ruby - 使用 Vagrant 的多个 EC2 实例

php - md5() .vs. 之间有什么不同?保存密码时的哈希值?

php - SwiftMailer + Gmail - 无法发送电子邮件

php - 尝试输出存储在 MySql 中的记录时出现问题

mysql - 无法连接到数据库服务器 MySQL Workbench 隧道错误

python - 值为字典 : trying to sum across those keys in python 的字典