Использование user_activation_key для других целей
Мне нужно знать, безопасно ли использовать user_activation_key
(из WP_User
) для других целей, например, для верификации email (функционал, который я бы создал для отправки подтверждения email перед активацией созданной учетной записи)?
Вот как это будет работать. Пользователь зарегистрируется через мою кастомную форму регистрации, которая будет доступна только во фронтенде. После успешной регистрации пользователь получит уведомление по email о создании учетной записи вместе со ссылкой активации, которая создается при регистрации по следующему шаблону:
http://www.example.com/verify/?key=SAMPLEACTIVATIONKEY4321
Как вы думаете, будет ли это безопасно?

Думаете, это будет безопасно?
Возможно. Две проблемы.
Вам также нужно убедиться, что ключ нельзя угадать. Никаких последовательных чисел. Вы можете использовать что-то вроде wp_generate_password
для получения псевдослучайных символов. Используйте случайную "соль" плюс email пользователя и время регистрации или uniqid
, и у вас будет хороший шанс обеспечить уникальность (см. ниже) и создать неугадываемый ключ.
$user_email = some_function_to_get_user_email();
$salt = wp_generate_password(20); // 20-символьная "случайная" строка
$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) {
// ключ существует, попробуйте снова!
} else {
// всё в порядке.
}
Если вам нужно руководство, попробуйте посмотреть, как WordPress обрабатывает сброс пароля по email. Процесс тот же: сгенерировать неугадываемый ключ, убедиться в его уникальности, добавить в базу данных для соответствующего пользователя, а затем отправить ему email со ссылкой для сброса пароля.

Привет @Ajay, я отредактировал свой вопрос, чтобы добавить более полные детали. Пожалуйста, проверь снова, так как я не понял, что ты имел в виду под "anyone use this".

Я думаю, он имеет в виду, что нужно сделать ключ активации более специфичным для пользователя, которому он принадлежит. Это предотвратит использование методов brute force для получения доступа к чужому аккаунту.

@Ollie Я убедился, что ключ активации отправляется на email-адрес пользователя, который пытается зарегистрироваться. Также ключ активации содержит хешированное значение имени пользователя, пароля и временной метки. Я правильно делаю? Вроде как новичок в этих вещах с Wordpress.
