Нет автоматическим регистрациям

В предыдущей статье я описал свои проблемы с удалением кучи зарегистрированных спам-юзеров в блоге, пришло время избавится от регистрации спам-юзеров таким же кардинальным образом, как я избавился от спам-комментариев. Естественно подразумевается, что и регистрации в блоге и написание комментариев осуществляется спам-скриптами, так как защититься от ручного спама весьма и весьма проблематично. Но ручной спам это лишь тысячная доля от всего спама и беспокоиться о нем вряд ли стоит. Метод защиты от авто-регистраций в блоге аналогичен методу защиты от спам-комментариев - будем использовать подмену полей. Причем вся эта защита займет у вас максимум 5 минут, да и то половина из этих 5 минут уйдет на обновление файла wp-login.php на сервере вашего хостера.

За авторизацию и регистрацию в блоге на WordPress отвечает файл wp-login.php. Подменять мы будем поле user_login, оно много где используется в этом скрипте, но нас интересует только регистрация, все остальное мы оставим в первоначальном виде. Открываем файл wp-login.php и ищем строчку:

399
$user_login = $_POST['user_login'];

заменяем ее на:

399
400
401
$user_login = $_POST['user_login'];
	if(!empty($user_login)) wp_die('Спаму нет!');
$user_login = $_POST['real_user_login'];

теперь находим:

414
415
416
417
<p>
	<label><?php _e('Username') ?><br />
	<input type="text" name="user_login" id="user_login" class="input" value="<?php echo esc_attr(stripslashes($user_login)); ?>" size="20" tabindex="10" /></label>
</p>

и заменяем эти строки на:

414
415
416
417
418
419
420
421
<div style="display: none;"><p>
	<label><?php _e('Username') ?><br />
	<input type="text" name="user_login" id="user_login" class="input" value="<?php echo esc_attr(stripslashes($user_login)); ?>" size="20" tabindex="10" /></label>
</p></div>
<p>
	<label><?php _e('Username') ?><br />
	<input type="text" name="real_user_login" id="user_login" class="input" value="<?php echo esc_attr(stripslashes($user_login)); ?>" size="20" tabindex="10" /></label>
</p>

Вот, собственно, и все. Что мы сделали? Мы добавили новое текстовое поле для ввода логина под именем "real_user_login", а старое поле "user_login" сделали невидимым. И встроили проверку на заполненность этого невидимого текстового поля. В итоге получается, что человек не заметит ни малейшей разницы при регистрации в блоге, а вот спам-скрипт заполнит именно поле "user_login" и получит ошибку регистрации "Спаму нет!". Для полной уверенности в том, что спам-регистрации больше не пройдут измените название поля "real_user_login" на любое другое, не содержащее слово "user_login".

Но что делать, когда за авторизацию и регистрацию в блоге отвечает сторонний плагин? Например, популярный плагин Themed Login and Register? Да абсолютно тоже самое, по аналогии с приведенным хаком. В качестве примера приведу изменения и для Themed Login and Register, открываем файл плагина themed-logreg.php и ищем строчку:

869
<label for="user_login"><?php _e('Username:') ?></label><br /> <input type="text" name="user_login" id="user_login" size="20" maxlength="20" value="<?php echo wp_specialchars($user_login); ?>" /><br /></p>

заменяем ее на:

869
870
871
872
<div style="display: none;">
<label for="user_login"><?php _e('Username:') ?></label><br /> <input type="text" name="user_login" id="user_login" size="20" maxlength="20" value="<?php echo wp_specialchars($user_login); ?>" /><br />
</div>
<label for="user_login"><?php _e('Username:') ?></label><br /> <input type="text" name="real_user_login" id="user_login" size="20" maxlength="20" value="<?php echo wp_specialchars($user_login); ?>" /><br /></p>

теперь находим:

783
$user_login = sanitize_user( $_POST['user_login'] );

и заменяем на:

783
784
785
$user_login = sanitize_user( $_POST['user_login'] );
	if(!empty($user_login)) wp_die('Спаму нет!');
$user_login = sanitize_user( $_POST['real_user_login'] );

Вот и все. Таким образом можно исправить любые плагины, которые отвечают за регистрацию пользователей в блоге. Проверить работу данного хака очень легко – удалите текст style="display: none;" из div'а и попробуйте зарегистрироваться, заполнив первое поле "Логин". Если вы все сделали правильно, то зарегистрироваться вы не сможете.

Напоминаю: от уже зарегистрированных спам-юзеров вы можете избавится с помощью плагина Clean Up Users, а от спам-комментариев с помощью этого метода.

Понравился пост? Подпишись на обновления по Обновления блога по RSSRSS или Обновления блога на TwitterTwitter !

Комментарии (всего 39 комментариев)
Написать комментарий

(обязательно)

(обязательно, не публикуется)

Для вставки кода используйте кнопку "Код", по умолчанию используется синтаксис подсветки языка "php", вы можете поменять его на любой другой поддерживаемый GeSHi язык, например "javascript", "css", "html4strict", "sql" и тд. Используйте предпросмотр!
 


Подписаться на уведомления без комментирования.