Спаммеры повсюду, они используют автоматизированное программное обеспечение, которое сканирует веб-сайты в поисках веб-сайтов (таких как сайты WordPress) с целью отправки и регистрации сотен и тысяч учетных записей и спам-комментариев.
На одном из моих сайтов на WordPress я обнаружил более 50 новых зарегистрированных спам-аккаунтов, все из которых созданы с одноразовыми адресами электронной почты . Чтобы предотвратить повторное появление, мне пришлось создать плагин, который предотвращал бы регистрацию аккаунтов с одноразовыми адресами электронной почты.
В этом уроке мы узнаем значение одноразовых адресов электронной почты, как они работают и, наконец, как их можно остановить в приложении PHP — хотя и с акцентом на WordPress.
Введение в одноразовые адреса электронной почты
DEA, аббревиатура одноразового адреса электронной почты (иногда называемая одноразовой, временной или саморазрушающей электронной почтой), — это услуга, которая позволяет зарегистрированному пользователю получать электронную почту на временный адрес, срок действия которого истекает по истечении определенного периода времени. Проще говоря, это учетные записи электронной почты, созданные для достижения краткосрочной цели.
Примеры поставщиков одноразовой электронной почты включают в себя: mailinator.com , YOPmail.com , trashmail.com и многие другие .
Хорошо
Первоначальная цель одноразовых адресов электронной почты — защитить себя от ненадежных веб-сайтов, как правило, чтобы избежать спама.
Плохой и уродливый
В Википедии есть отличное объяснение, почему одноразовые электронные письма — плохие или уродливые?
Многим администраторам форумов и вики не нравятся DEA, потому что они запутывают личность участников и затрудняют поддержание контроля участников. Например, тролли, вандалы и другие пользователи, которые могли быть забанены, могут использовать одноразовые адреса электронной почты, чтобы обойти запрет. Использование DEA-провайдера только делает это проще; То же удобство, с которым человек может создать DEA для фильтрации спама, также применимо к троллям. В результате администраторы форумов, вики, владельцы блогов и другие общедоступные сайты, которым требуются имена пользователей, могут иметь веские основания для запрета DEA.
Поскольку спамеры могут использовать одноразовые электронные письма для совершения своих злодеяний, нам действительно нужно серьезно подумать о том, как мы можем остановить DEA.
Обнаружение одноразовых адресов электронной почты
Не существует алгоритма (насколько мне известно) для определения, является ли электронная почта одноразовой или нет.
Чтобы определить одноразовый адрес электронной почты:
— Во-первых, вам нужно будет создать и поддерживать список / базу данных одноразовых почтовых доменов.
— Проверьте, находится ли доменная часть электронного письма (например, в «[email protected]», «trashmail.com» является доменной частью) в базе данных.
Ниже приведена функция PHP, которая принимает адрес электронной почты в качестве аргумента и возвращает true, если он одноразовый или false в противном случае.
<?php /** * Check if an email is disposable or not. * * @param $email string email to check * * @return bool */ function detect_disposable_email( $email ) { $disposable_list = array( 'drdrb.net', 'upliftnow.com', 'uplipht.com', 'venompen.com', 'veryrealemail.com', 'viditag.com', 'viewcastmedia.com', 'viewcastmedia.net', 'viewcastmedia.org', 'gustr.com', 'webm4il.in', 'wegwerfadresse.de', 'wegwerfemail.de', 'wetrainbayarea.com', 'wetrainbayarea.org', 'wh4f.org', 'whyspam.me', 'willselfdestruct.com', 'winemaven.in', 'wronghead.com', 'wuzup.net', 'wuzupmail.net', 'www.e4ward.com', 'www.gishpuppy.com', 'www.mailinator.com', 'wwwnew.eu', 'xagloo.com', 'xemaps.com', 'xents.com', 'xmaily.com', 'xoxy.net', 'yep.it', 'yogamaven.com', 'yopmail.fr', 'yopmail.net', 'ypmail.webarnak.fr.eu.org', 'yuurok.com', 'zehnminutenmail.de', 'zippymail.in', 'zoaxe.com', 'zoemail.org', 'inboxalias.com', 'koszmail.pl', 'tagyourself.com', 'whatpaas.com', 'emeil.in', 'azmeil.tk', 'mailfa.tk', 'inbax.tk', 'emeil.ir', 'crazymailing.com', 'mailimate.com' ); //extract domain name from email $domain = array_pop( explode( '@', $email ) ); if ( in_array( $domain, $disposable_list ) ) { return true; } else { return false; } } //extract domain name from email $domain = array_pop( explode( '@', $email ) ); if ( in_array( $domain, $disposable_list ) ) { return true; } else { return false; } }
Количество поставщиков одноразовой электронной почты растет с каждым днем, что делает невозможным обновление нашего списка DEA.
Существует ряд служб, которые хранят обновленный список одноразовых электронных писем, а также предоставляют API для их обнаружения, такие как NameAPI и block-disposable-email.com . Мы будем использовать последний в кодировании плагина, который будет блокировать пользователей, пытающихся создать учетную запись с одноразовым письмом в WordPress.
Остановка одноразовой регистрации по электронной почте в WordPress
Как упоминалось ранее, мы будем использовать block-disposable-email.com . Прежде чем мы углубимся в разработку плагина, зарегистрируйте аккаунт на сайте с одноразовым электронным письмом (конечно), чтобы получить бесплатный ключ API .
Примечание: бесплатный аккаунт поставляется с ограничением до 200 запросов в месяц. Чтобы увеличить квоту, см. Страницу с ценами .
С учетом сказанного, давайте начнем разработку плагина.
Прежде всего, включите заголовок плагина.
<?php /* Plugin Name: Stop Disposable Email Sign-ups Plugin URI: http://sitepoint.com Description: Stop users from registering a WordPress account with disposable emails. Version: 1.0 Author: Agbonghama Collins Author URI: http://w3guy.com License: GPL2 */
Создайте класс PHP со свойствами, в которых будет храниться ключ API.
class Stop_Disposable_Email { /** @type string API key */ static private $api_key = 'd619f9ad24052ad785d1edf65bbd33b4';
Метод конструктора класса будет состоять из фильтра, который stop_disposable_email_signup
метод ( stop_disposable_email_signup
) к registration_errors для проверки адреса электронной почты и обеспечения его отсутствия.
public function __construct() { add_filter( 'registration_errors', array( $this, 'stop_disposable_email_signups' ), 10, 3 ); }
Далее мы используем вспомогательный is_email_disposable()
, который отправит GET-запрос в API block-disposable-email.com через wp_remote_get
используя WordPress HTTP API, чтобы проверить состояние электронной почты, то есть, является ли она одноразовой или нет.
/** * Check if an email is disposable or not. * * @param $email string email to check * * @return bool true if disposable or false otherwise. */ public static function is_email_disposable( $email ) { // get the domain part of the email address // eg in [email protected], "trashmail.com" is the domain part $domain = array_pop( explode( '@', $email ) ); $endpoint = 'http://check.block-disposable-email.com/easyapi/json/' . self::$api_key . '/' . $domain; $request = wp_remote_get( $endpoint ); $reponse_body = $body = wp_remote_retrieve_body( $request ); $response_in_object = json_decode( $reponse_body ); $domain_status = $response_in_object->domain_status; if ( $response_in_object->request_status == 'success' ) { if ( $domain_status == 'block' ) { return true; } elseif ( $domain_status == 'ok' ) { return false; } } }
Вот код для stop_disposable_email_signups()
который не позволит пользователям одноразовых адресов электронной почты создавать учетную запись.
/** * Stop disposable email from creating an account * * @param $errors WP_Error Registration generated error object * @param $sanitized_user_login string sign-up username * @param $user_email string sign-up email * * @return mixed */ public function stop_disposable_email_signups( $errors, $sanitized_user_login, $user_email ) { if ( self::is_email_disposable( $user_email ) ) { $errors->add( 'disposable_email', '<strong>ERROR</strong>: Email is disposable, please try another one.' ); } return $errors; }
Наконец, мы закрываем класс плагина.
} // Stop_Disposable_Email
Предложения по улучшению плагина
Я создал свойство класса и вручную добавил к нему мой API-ключ block-disposable-email.com. В идеале должна быть создана страница настроек для плагина с полем формы, в котором ключ к базе данных будет сохранен для повторного использования плагином.
Давайте сделаем это задание для вас. Это один из способов, как вы могли бы сделать это.
- Создайте страницу настроек для плагина с полем ввода, которое сохранит ключ в базе данных, вот отличное руководство .
- Извлеките ключ API из базы данных с помощью функции get_option и используйте его вместо этого.
Резюме
В этой статье мы узнали значение DEA, modus-operandi и добра, зла и уродливых систем одноразовых адресов электронной почты. Мы узнали, как можно остановить DEA, и, наконец, создали плагин для запрета пользователям регистрировать учетную запись с одноразовым адресом электронной почты на сайте WordPress.
Плагин доступен на GitHub, если вы хотите использовать его на своем сайте или расширить его.
Если у вас есть какие-либо вопросы или предложения, пожалуйста, сообщите нам об этом в комментариях.