Как защитить WordPress блог от автоматических регистраций ботами, в последнее время этот вопрос волнует многих. Я бы наверное не написал этот пост, если бы сам не столкнулся с данной проблемой. В последнее время, на почту все чаще и чаще приходят сообщения об регистрации новых пользователей, но, невооруженным глазом видно, что это бот. В данном уроке я покажу, как легко решить эту проблему.
На сайте WordPress.org есть много плагинов, которые добавляют всевозможные капчи в регистрацию, но боты научились ее обходить, а также многим пользователям не нравиться вводить капчу (картинка из разных символов). Поэтому я покажу? как защитить блог от спамных регистраций без использования плагинов.
Вкратце опишу, как будет работать защита. Регистрация в wordpress проходит в файле wp-login.php, боты написаны так, чтобы передавать значения в поле input text, у которого атрибут name равен user_login. Для реального пользователя, мы создадим новое поле input text с другим параметром атрибута name.
Открываем файл wp-login.php, который находиться в корне WordPress. Находим в нем нижеприведенную строку:
$user_login = $_POST['user_login'];
На момент написания данной статьи, в последней версии WordPress это 670 строка.
Заменяем на:
$user_login = $_POST['user_login']; if(!empty($user_login)) wp_die('Завершаем работу.'); $user_login = $_POST['login_1578'];
login_1578 — уникальное значение, которое присвоим ниже для поля input text. Вы можете изменить его на другое, только в пункте 2 значение должно быть таким же, как и в 1 пункте.
Ищем:
<p> <label for="user_login"><?php _e('Username') ?><br /> <input type="text" name="user_login" id="user_login" class="input" value="<?php echo esc_attr(wp_unslash($user_login)); ?>" size="20" /></label> </p>
У меня это строка 695
Меняем на:
<p style="display: none;> <label for="user_login"><?php _e('Username') ?><br /> <input type="text" name="user_login" id="user_login" class="input" value="<?php echo esc_attr(wp_unslash($user_login)); ?>" size="20" /></label> </p> <p> <label for="user_login"><?php _e('Username') ?><br /> <input type="text" name="login_1578" id="user_login" class="input" value="<?php echo esc_attr(wp_unslash($user_login)); ?>" size="20" /></label> </p>
Если вы меняли значение в первом пункте, то во втором поле input type=»text» значение name должно совпадать с тем, которое вы прописали в первом пункте.
Вот и все, после этого бот не сможет зарегистрироваться на вашем сайте. Разве что бота настроят конкретно под ваш сайт, но вы в любой момент можете изменить значение полей в пункте 1 и 2, и он вновь перестанет работать.
Если данный урок был вам полезен или просто понравился, буду благодарен если вы поделитесь им в социальных сетях.