Защита блога на WordPress от спама

Довольно много спама приходит от ботов. Есть много плагинов, которые избавят вас от него. Многие довольно громоздки, да и разбираться в них особо не хотелось. Решил ради интереса сам написать.

Проблема, собственно, в том, что идентификаторы и имена элементов формы в WP стандартные. Да и файлы, обрабатывающие POST запросы известно как работают. Поэтому написать бота, который сам постит на сайте легко. Чтобы этого избежать достаточно проверку какую-нибудь делать. К примеру, можно проверять откуда запрос послан. В поле host запроса, должна быть страница вашего сайта. Умные боты, конечно же, могут это поле подменять.

Можно разместить капчу. Но я к ней не питаю тёплых чувств. Если вижу капчу на сайте (особенно типо той, что на ipb 3.0+), то вообще перестаю думать о комментировании :D

Решил обычный checkbox сделать. Для этого в файле шаблона формы wp-includes/comment-template.php добавляем чекбокс.

<?php if ( !is_user_logged_in() ) { ?>
	<p style="text-align:left;">
		<style type="text/css">
			#not_bot{ width:20px !important; }
		</style>
		<input  type="checkbox" id="not_bot" name="not_bot" value="not_bot">Я не бот<br />
	</p>
<?php } ?>
Теперь, в случае, если хочет комментить незарегистрированный юзер, то на экране будет checkbox.

Теперь надо обработку POST запроса подкорректировать. Для этого в файле wp-comments-post в корневой директории пишем:

$comment_not_bot      = ( isset($_POST['not_bot']) ) ? trim($_POST['not_bot']) : null;

if(!$user->ID &&  $comment_not_bot === null)
	wp_die( __('Ботам доступ запрещён.') );
Теперь, в случае, если юзер не зареген и не нажал на чекбокс перед отправкой, он увидит сообщение об ошибке.

____________________________________

Ищите хостинг? хостинг украина — ваш выбор. Выгодные условия и оперативная тех. поддержка.