为网站创建激活链接,用啥方法生成?
Posted
技术标签:
【中文标题】为网站创建激活链接,用啥方法生成?【英文标题】:Create an activation link for a website, what method to generate it?为网站创建激活链接,用什么方法生成? 【发布时间】:2013-10-29 22:05:59 【问题描述】:我需要为网站创建激活系统。用户注册,收到一封电子邮件,然后单击查询字符串中带有密钥的链接,我端的脚本会对其进行解码。
我的问题不在于编程本身,而在于生成链接的好方法是什么?散列是一种想法,但它是一种方式。我应该加密一些东西吗?有没有人负责同样的事情有任何见解?
有没有办法做到这一点: 不在数据库中存储任何密码, 不在查询字符串中放置任何明显的用户信息
用户在具有主键 ID 和其他信息的表中。它不需要非常安全,但不应该很容易被破坏。我正在用 php 做这个。我找不到类似的问题,所以如果我忽略了一个问题,我将不胜感激。
【问题讨论】:
在这里查看***.com/questions/876139/… 执行您所说的最安全的方法是使用全局唯一标识符(GUID,UUID,无论别名是什么。在 PHP 中有一个名为uniqid()
的函数可以执行类似的操作。mysql 上另一方面有一个名为UUID()
的函数。就个人而言,我会使用MySQL的函数创建UUID()
,将其分配给记录,然后将其用作激活标识符。另一方面,速度方面, 使用 PHP 的 uniqid()
效率更高,因为它更短并且索引它会更有效。
更新:关于不将任何内容存储到数据库 - 这是可能的。您可以以某种方式对 ID 进行加密,但这样您就有可能破坏您的加密方法。选择一种 AES 算法和一个好的密钥可能就足够了。这样您就不会存储额外的数据(激活链接),但您会遇到如何安全发送加密数据的问题。您可以使用 base64_encode
来加密 ID。另一个想法是有额外的列(或表映射到记录)并使用您通过电子邮件发送的全局唯一标识符。
【参考方案1】:
我之前通过在连接的记录 ID 和电子邮件地址上执行和 md5 来完成此操作。如果需要,您可以添加一些额外的字符或字段。然后,当用户单击链接时,您只需再次运行相同的选择以查看是否匹配。
// generate the key
select md5(concat(id,email,'Some custom text')) as `verification_key` from ...
// verify the user
select * from user where '$verifikation_key' = md5(concat(id,email,'Some custom text'));
然后您可以更新用户记录以标记为已验证。
【讨论】:
谢谢,我们的旧系统没有激活,所以我试图避免它,但这对我来说应该没问题。以上是关于为网站创建激活链接,用啥方法生成?的主要内容,如果未能解决你的问题,请参考以下文章
eclipse中在函数头部添加说明性注释和参数的注释,该用啥快捷键
从CentOS6.5用啥办法备份mysql数据库windows上才能还原使用?
SQL2000的数据库文件后缀是.mdf和.ldf文件能用啥方法直接下载下来?