2013-10-21 29 views
1

我需要为网站创建一个激活系统。用户注册,获得一封电子邮件,然后在查询字符串中点击一个带有密钥的链接,然后我的一个脚本将其解码。为网站创建一个激活链接,生成它的方法是什么?

我的问题不在编程本身,而是什么是生成链接的好方法?哈希是一个想法,但它是一种方式。我应该加密一些东西吗?有谁负责这个相同的事情有任何见解吗?

有没有办法做到这一点,这两个: 不存储在数据库中的所有密码, 不把任何明显的用户信息的查询字符串

用户与主键的表ID和其他信息。它不需要疯狂的安全,但不应该容易破坏。我正在做这个与PHP。我找不到类似的问题,所以如果我忽略了一个,我会很感激链接。

+0

在这里检查http://stackoverflow.com/questions/876139/how-to-generate-a-secure-activation-string-in-php – pregmatch

+0

做你所说的最安全的方法是使用全局唯一标识符(GUID,UUID,无论别名是什么,在PHP中有一个名为'uniqid()'的函数可以做到这一点,另一方面,MySQL有一个名为'UUID()'的函数,我个人使用MySQL的函数创建'UUID()',将它分配给记录,然后用它作为激活标识符发送出去;另一方面,速度方面,使用PHP的'uniqid()'会更有效率,因为它更短并索引它将更有效 –

+0

更新:关于不存储任何东西到数据库 - 这是可能的。你可以以某种方式加密ID,但是你可能会冒险破坏你的加密方法选择AES算法之一和一个好密钥mi足够了。这样你就不会存储额外的数据(激活链接),但你有一个如何安全地发送加密数据的问题。你可以用'base64_encode'来加密ID。另一个想法是有额外的列(或表映射到记录)并使用通过电子邮件发送的全局唯一标识符。 –

回答

3

我已经完成了此操作,并通过在连接的记录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')); 

然后,您可以更新用户记录以标记为已验证。

+0

谢谢,我们的旧系统没有打到激活表,所以我试图避免它,但这应该对我来说很好。 – chiliNUT

相关问题