Запретить использование трюков с плюсом и точками в email адресах Google/других провайдеров при регистрации?

Вопрос или проблема

Пользователь зарегистрировался в моем блоге WordPress с именем “[email protected]
(например).

Это меня устраивает. Однако если пользователь вернется с
[email protected]“, я хочу его остановить от повторной регистрации
и, возможно, вежливо напомнить ему, что он уже зарегистрировался с
“той же” адрес gmail.

Есть ли плагин, который это делает?

Тот же вопрос касается снятого с позиций “[email protected]” и
[email protected]” (используя дополнительные точки в адресе электронной почты, которые
gmail распознает как тот же адрес).

Я осознаю, что люди могут легко получить бесплатные адреса электронной почты, не требующие регистрации, так что это не остановит кого-либо от многократной регистрации,
но это может помочь.

Вы могли бы использовать хук user_register для нормализации адреса электронной почты и либо хранить его в отдельном поле в базе данных, либо просто выполнить запрос на совпадение нормализованного адреса электронной почты. Однако я не вижу хука pre-user_register, так что похоже, что придется удалять пользователя после его создания, если пользователь уже зарегистрирован.

Вот ссылка на документацию: http://codex.wordpress.org/Plugin_API/Action_Reference/user_register

И вот вопрос на StackOverflow о нормализации адресов gmail: https://stackoverflow.com/questions/15592956/gmail-username-collapsing

И немного кода для этого:

https://stackoverflow.com/questions/1586389/how-to-check-for-a-duplicate-email-address-in-php-considering-gmail-user-name

Ответ или решение

Вопрос о предотвращении повторной регистрации пользователей на WordPress сайте с использованием так называемых "плюс и точка" трюков в адресах электронной почты, особенно в случае с почтой от Google (Gmail), вызван желанием администраторов ограничить дублирование аккаунтов и, возможно, упростить управление пользователями. Это проблема, которая может создавать определенные неудобства в управлении базой пользователей, особенно на крупных платформах. Поэтому рассмотрение этой темы требует внимательного анализа и разработки практического решения.

Теория

Google Gmail предлагает пользователям свободу в использовании определённых символов в электронных адресах. Под "плюс и точка" трюками понимается возможность добавления точек в локальную часть адреса (например, "[email protected]" и "[email protected]" будут одинаковыми для Gmail), а также использование знака плюс "+" для создания алиасов (например, "[email protected]" также будет направлен в ту же почту, что и "[email protected]"). Эта функциональность удобна для пользователей, но может быть использована для обхода регистрационных ограничений на сайтах.

Для решения проблемы необходимо нормализовать электронные адреса до их базовой формы перед регистрацией и проверять их на уникальность в базе данных. Таким образом, будет предотвращена регистрация нескольких аккаунтов с использованием одного и того же почтового ящика на Gmail.

Пример

Предположим, пользователь уже зарегистрирован на вашем WordPress сайте с адресом электронной почты "[email protected]". Если такой пользователь попытается зарегистрироваться заново, используя адрес "[email protected]", система должна распознать, что это тот же самый адрес и предотвратить дублирование, отправив уведомление о том, что данный адрес уже использован.

Вот несколько шагов, которые можно предпринять для выполнения этой задачи:

  1. Нормализация адресов электронной почты: Очистка лишних точек и всего после знака "+" в локальной части перед проверкой или регистрацией. Это сведение адресов email к канонической форме позволит правильное сравнение.

  2. Проверка существующих пользователей: Перед созданием нового пользователя необходимо проверить базу данных на наличие нормализованной версии вводимого email.

  3. Интеграция с WordPress: Использование хуков WordPress, таких как user_register, может помочь выполнить проверку и предпринять необходимые действия для предотвращения создания дубликата пользователя.

Применение

Для воплощения данной идеи может быть реализован WordPress плагин или целевой скрипт. Приведём пример базовой реализации на PHP:

function normalize_email($email) {
    list($user, $domain) = explode('@', $email);
    if ($domain === 'gmail.com' || $domain === 'googlemail.com') {
        $user = str_replace('.', '', $user);
        $user = explode('+', $user)[0];
    }
    return $user . '@' . $domain;
}

function prevent_duplicate_registration($user_id) {
    $user_info = get_userdata($user_id);
    $email_normalized = normalize_email($user_info->user_email);

    // Поиск нормализованного email в базе данных
    $existing_user = email_exists($email_normalized);

    if ($existing_user && $existing_user != $user_id) {
        wp_delete_user($user_id);
        // Послать уведомление пользователю и администратору
    }
}

add_action('user_register', 'prevent_duplicate_registration');

Этот код сначала нормализует введенный пользователем email, удаляя лишние точки и часть после "+", затем проверяет уже существующий адрес в базе данных. Если совпадение найдено, новый зарегистрированный пользователь удаляется, что предотвращает дублирование.

Заключение

Одним из наиболее эффективных способов решения проблемы множественных регистраций через манипуляции с адресами электронной почты является нормализация адресов при регистрации. Это обеспечит точное сопоставление и исключит вероятность обхода ограничений за счет функциональности Gmail. Создание плагина или кастомного кода, интегрирующегося в WordPress, позволит реализовать данный механизм. Кроме того, следует уведомлять пользователей о существовании их email в системе, чтобы подкрепить доверительные отношения и упростить администрирование платформы. Понимание технической стороны вопроса позволит обеспечить безопасное и удобное взаимодействие пользователей с ресурсом.

Оцените материал
Добавить комментарий

Капча загружается...