WordPress Россия

Обманываем спам-скрипты, не давая им регистрироваться в вашем блоге.

Добавлено 6 марта 2010 в категорию Плагины.

В предыдущей статье я описал свои проблемы с удалением кучи зарегистрированных спам-юзеров в блоге, пришло время избавится от регистрации спам-юзеров таким же кардинальным образом, как я избавился от спам-комментариев. Естественно подразумевается, что и регистрации в блоге и написание комментариев осуществляется спам-скриптами, так как защититься от ручного спама весьма и весьма проблематично. Но ручной спам это лишь тысячная доля от всего спама и беспокоиться о нем вряд ли стоит. Метод защиты от авто-регистраций в блоге аналогичен методу защиты от спам-комментариев – будем использовать подмену полей. Причем вся эта защита займет у вас максимум 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, а от спам-комментариев с помощью этого метода.

Категории