将USER_ACTIVATION_KEY用于其他目的

时间:2012-10-28 作者:mcometa

我需要知道使用是否安全user_activation_key (来自WP_User) 用于其他目的,如电子邮件验证(我将创建的一个功能,在激活创建的帐户之前先发送电子邮件验证)?

下面是工作原理。用户将使用我的自定义注册表进行注册,该注册表仅在前端可用。成功注册后,将通过电子邮件通知用户,已使用以下约定沿注册时创建的激活链接创建了帐户:

http://www.example.com/verify/?key=SAMPLEACTIVATIONKEY4321

你认为这样安全吗?

2 个回复
最合适的回答,由SO网友:chrisguitarguy 整理而成

你认为这样安全吗?

大概两个问题。

您还需要确保钥匙不可猜测。无递增数字。你可以使用wp_generate_password 获取一些伪随机字符。使用随机“salt”加上用户的电子邮件,并注册时间或uniqid 您很有可能确保唯一性(见下文)并创建一个不可猜测的键。

$user_email = some_function_to_get_user_email();
$salt = wp_generate_password(20); // 20 character "random" string
$key = sha1($salt . $user_email . uniqid(time(), true));
您还需要确保键的唯一性:不应该有任何冲突。

user_activation_key 数据库中确保唯一性的列,所以这取决于你的应用程序(例如WordPress和PHP方面的东西)来确保它的唯一性。换言之,在生成密钥之前或之后,请确保该密钥在数据库中不存在。简单、未经测试的示例:

<?php
$key = some_function_that_generates_a_key();
$res = $wpdb->get_col($wpdb->prepare("SELECT EXISTS(SELECT 1 FROM {$wpdb->users} WHERE user_activation_key = %s)", $key));
if ($res) {
    // the key exists, try again!
} else {
    // good to go.
}
如果你需要一个指南,试着看看WordPress是如何重置电子邮件密码的。过程是一样的:生成一个不可猜测的密钥,确保其唯一性,与相应的用户一起插入数据库,然后向他们发送一封电子邮件,其中包含重置密码的链接。

SO网友:Ajay Kumar Maheshwari

不,它不安全,因为任何人都会使用它。但是,如果您可以提供您的电子邮件id,那么它会向您推荐特定的激活密钥或号码,这样是安全的

结束

相关推荐