Борьба со спамом в WordPress с помощью плагина DCaptcha и файла htaccess, как отключить корзину в Вордпрессе

26 декабря, 2009

Сегодня мы поговорим о практически стопроцентной защите от спама в комментариях WordPress, которая возможна при помощи замечательного и очень простого плагина DCaptcha. Он представляет из себя самую простую капчу, которую только можно было бы придумать.

Посетителям вашего блога не надо будет разгадывать каких-либо ребусов — достаточно будет всего лишь поставить галочку в поле «Я не робот», при добавлении своего сообщения. Спам в комментариях — это бич всех WP блогов, вне зависимости от их посещаемости.

У меня в день бывало до 60-80 спамных сообщений (все они без граватара). Для борьбы с ними я использовал плагин Akismet. Он безусловно полезный, но работающий, однако, не безупречно. Иногда Akismet все же заносит в спам вполне легитимные сообщения. Поэтому у меня остро встала задача найти идеальное решение для этой нетривиальной проблемы. Что примечательно, это решение работает у меня уже почти четыре года и эту капчу до сих пор не пробил ни Хрумер, ни какой-либо другой спамерский софт.

DCaptcha — абсолютная защита от спама в WordPress


Но проверять каждый день по 60-80 полотенец со спамом в админке — удовольствие не из самых больших. Поэтому многие, и я в том числе, просто используют кнопку удалить весь спам из блога. Но вместе со спамом, таким образом, вы удаляете и несколько реальных сообщений, что является по сути проявлением неуважения к комментатору, а этого допускать нельзя.

Кроме того, спамеры способны достаточно серьезно нагружать сервер хостинга, т.к. все сгенерированные ими сообщения записываются и хранятся в базе данных до тех пор, пока вы их не удалите. На фоне других факторов, создающих сильную нагрузку на сервер хоста, это может стать последней каплей и привести к блокировке вашего ресурса (читайте про оптимизацию Вордпресса для снижения его нагрузки на хостинг).

Поэтому я задумался над установкой капчи, т.е. специального WP плагина, который позволит оставлять сообщения только обычным пользователям, но режущий спамеров, которые в основном пользуются программным способом (хрумер и прочий софт). Многие виды капч уже не являются проблемой для таких программ. Однако, еще встречаются удобные капчи, которые пока не научились обходить в силу их сложности, либо в силу малого процента использования.

Кроме проблемы обхода защиты многих капч спамерским софтом, некоторые их виды, стремясь добиться максимальной сложности распознания символов на приводимом ими рисунке, создают серьезную проблему для пользователей (ненавижу угадывать, что за буква там нарисована).

Не всем посетителям и не всегда с первого раза удается правильно распознать, что написано на той или иной капче. Они злятся, плюются и больше не заходят на ваш блог (на одном из форумов я как-то вообще не смог пройти капчу, чем был очень раздосадован).

Удачным примером, на мой взгляд, является защита, предлагающая выполнить простейшие арифметические действия с четко изображенными цифрами и записать получившийся результат. Но еще более простой и удобной для пользователя является капча плагина DCaptcha, где нужно всего лишь поставить галочку в поле «Я не робот». Наверняка вы уже встречали такие варианты.

На данный момент у меня он работает стопроцентно, т.е. не пропускает вообще ни одного спамного комментария на протяжении почти четырех лет. Я даже отключил Akismet, т.к. на данный момент в нем нет нужды.

Установка

У меня в данный момент установлена бета версия DCaptcha 0.2b, которая, тем не менее, работает на сто процентов. За четыре года не было ни одного пробоя! Я даже забыл, что такое спам! Красота, но думаю, что как только данный плагин получит широкое распространение (и я, как не печально, способствую этому написанием данной статьи), то спамеры займутся им всерьез.

Поэтому никому не рассказывайте про это чудо — будем пользоваться им втихую. Пока что это, наверное, идеальная капча для WordPress.

Установка этого расширения чуток отличается от стандартной. Нужно будет выполнить следующие действия:

  1. распакуйте архив с капчей dimoning.ru-captcha.rar, используя ftp-менеджер подключитесь к вашему хосту и загрузите папку dimoning.ru-captcha в папку с плагинами wp-content/plugins/
  2. войдите в админку и выберете вкладку «Плагины»- «Inactive»
  3. найдите строку с DCaptcha и активируйте его
  4. теперь нужно установить права доступа 777 (по ссылке описано, как это сделать в Файлзиле) на папку /wp-content/plugins/dimoning.ru-captcha/num
  5. затем нужно в адресной строке браузера ввести следующий Урл http://vash_site.ru/wp-content/plugins/dimoning.ru-captcha/install.php и нажать «Enter». В результате будет сгенерирован уникальный код, позволяющий защитить капчу от взлома

После установки обязательно проверьте, работает ли капча. Для этого просто зайдите на свой блог как обычный посетитель и попробуйте оставить комментарий. Если вам захочется изменить в настойках DCaptcha надпись «Это не спам», то для этого нужно будет открыть на редактирование файл /wp-content/plugins/dimoning.ru-captcha/dimoning.ru-captcha.php в текстовом редакторе.

Найдите с помощью встроенного поиска используемого вами текстового редактора строку:

Это не спам.<br>

и внесите нужные вам изменения. Я, например, сделал надпись красного цвета. Для этого нужно будет всего лишь добавить в файл таблицы каскадных стилей CSS вашей темы оформленияwp-content/themes/название_вашей_темы_оформления/style.css следующее свойство:

#dcaptcha {
color: red;
}

Наверное, многие из вас, дочитав статью до этого места, уже успели установить и настроить это расширение.

Однако, при установленном и активированном плагине спам-комментарии в базу данных писАться не будут, но, правда, это справедливо только в том случае, если у вас отключена, так называемая, «Корзина», которая появилась в WordPress начиная с версии 2.9. При активной «Корзине» весь спам, отсекаемый этой капчей, будет благополучно падать в корзину и накапливаться там до тех пор, пока она автоматически не очистится.

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

Кстати, именно начиная с версии WordPress 2.9 плагин DCaptcha перестал отсекать спам, что для меня явилось очень большой и неприятной неожиданностью. В какой-то момент я неосмотрительно обновился до версии 2.92 и обнаружил, что стали появляться в большом количестве гадости, от которых я уже успел отвыкнуть.

На сайте разработчика многие жаловались на неработоспособность этого расширения. Но, к сожалению, решения данной проблемы там не приводилось. Поэтому я решил поискать альтернативные способы борьбы, ибо, как я уже говорил выше, проверенный временем Akismet меня не устраивал по ряду соображения. Мне хотелось чего-нибудь такого же радикального.

Борьба со спамом в Вордпресс с помощью файла htaccess


Первое, что я решил попробовать, это возможность блокировки спам-ботов через «htaccess». Название этого файла начинается с точки и если его в корневой папке вашего хоста не обнаружится, то следует обязательно создать, ибо возможностей у него очень много и некоторые из этих возможностей вам могут понадобиться. Давайте я немного расскажу о файле «htaccess».

«htaccess» предназначен для, так называемого, децентрализованного управления веб сервером Apache. Дело в том, что в 99 процентах случаев ваш проект будет размещен на хостинге под управлением сервера Apache. Возможности этого сервера всеми хорошо изучены и к тому же он бесплатен. Так вот, для того, чтобы вебмастер (вы), не имеющий доступа к рычагам управления Apache, тем не менее имел возможность управлять некоторыми аспектами работы сервера и был придуман этот файл.

Все директивы (команды), прописываемые в "htaccess, будут применены только к содержимому той директории (папки), в которой находится данный файл. Следовательно, если вы создадите в корневой папке своего хоста «.htaccess», то сможете давать команды серверу Apache, которые будут применены ко всему вашему сайту. Этот файл можно будет создать так же и в любых других директориях движка и, например, запаролить через него доступ к этим каталогам.

Не многие знают все директивы (команды) и правила их написания в «.htaccess», но этого и не требуется. Зачастую вам нужно будет только скопировать уже готовый код из какого-либо примера и заменить в нем данные на те, что подходят вам.

Если файла такого в коневой папке WordPress вы не увидите, то возможно, что его там и нет, но сначала вам нужно будет в этом убедиться. Для работы с сайтом по FTP я использую (да и вам тоже советую) замечательную программу FileZilla (см. ссылку выше). После подключения к своему хосту по FTP откройте корневую папку (обычно она называется либо PUBLIC_HTML, либо HTDOCS ) и проверьте наличие в ней файла «htaccess».

Если он там будет, то просто откройте его на редактирование, а если вы такого файла в корневой папке не найдете, то попробуйте в программе FileZilla выбрать из верхнего меню «Сервер» — «Принудительно отображать скрытые файлы». Если и после этого искомого объекта в корне вы не найдете, то создайте у себя на компьютере пустой текстовый файл, назовите его как-нибудь и скопируйте на сервер хостинга. После чего переименуйте его в «htaccess».

Существует два способа блокировки спам-сообщений в htaccess. Я использовал такой код:

<Limit GET POST PUT>
order allow,deny
allow from all
deny from 109.74.85.150
deny from 124.162.118.179
deny from 124.238.242.103
deny from 124.238.242.36
deny from 143.248.3.35
</LIMIT>

Т.е. здесь вы перечисляете IP адреса спамеров, которые забивают ваши комментарии всяческим мусором. IP адрес компьютера, с которого был отправлен комментарий, можно увидеть в админке Вордпресс при просмотре комментов:

Минусы такого способа защиты, наверное, очевидны. Во-первых, вам придется совершить очень большое количество операций копирования IP адресов спамеров из админки в приведенный выше код файла «htaccess». Во-вторых, спамеры тоже не лыком шиты и активно используют прокси сервера, что существенно увеличивает список адресов, которые вам нужно будет добавить черный список.

Я ухитрился вручную насобирать более 400 IP адресов спамеров. Что мне это в результате дало? Поток спама уменьшился с сотен до десятков. Уже существенно, но очень уж трудозатратно и утомительно. Не намного лучше, чем вручную перелапачивать тоны хлама.

Второй способ блокирования спамеров заключается в добавление в «htaccess» содержимого этого файла с директивами, позволяющими фильтровать спам по ряду признаков. Сам я этот способ не пробовал, ибо сумел таки заставить работать мой любимый плагин DCaptcha под Вордпресс 2.92, о чем сейчас вам и расскажу.

DCaptcha работает на современных версиях WordPress


Для того, чтобы заставить DCaptcha корректно работать на современных версиях WP, как оказалось много не надо. Просто подключитесь по FTP с серверу хостинга, где у вас размещены файлы вашего блога, и откройте на редактирование файл Dimoning.ru-captcha:

/wp-content/plugins/dimoning.ru-captcha/dimoning.ru-captcha.php

Найдите в нем строку:

wp_set_comment_status ($id, 'delete');

и замените в ней «delete» на «trash», чтобы в результате получилось так:

wp_set_comment_status ($id, 'trash');

Что же мы получим в результате проведения этих изменений в коде плагина? Ну, во-первых, он начнет работать. Это уже хорошо, но давайте посмотрим повнимательней, а что же мы, собственно, сделали и куда теперь будут попадать комментарии, которые спаморезка пометит как спамные?

Начнем, пожалуй, со второй части вопроса. Порезанные сообщения, при тех настройках, что мы задали чуть выше, попадут либо в разряд «Спам» (в случае замены «delete» на «spam»), либо в разряд «Корзина» (в случае замены «delete» на «trash»).

Т.е. получается, что спам все равно записываться в базу данных WordPress, но просто с пометкой. Легче ли нам станет от этого или нет? С одной стороны, конечно же, легче. Ведь мы теперь смело сможем, зайдя в админку, очистить все содержимое корзины или спама, не боясь удалить сообщения от реальных читателей. Однако, весь этот хлам будет создавать дополнительную и ненужную нагрузку на сервер хостинга.

Даже если вы отключите корзину в Вордпрессе (о том, как это сделать можно прочитать в конце статьи), то все равно сообщения спаммеров все равно будут в нее падать (хотя, ее как бы и нет). Это легко будет проверить, включив выключенную раннее корзину (вы увидите в ней кучу всего, что порезано плагином DCaptcha).

Для того, чтобы это все удалялось сразу же, минуя базу данных, вам нужно будет внести в код этого расширения несколько иные изменения, чем были описаны выше. Но если вам наплевать на нагрузку на сервер хостинга, создаваемую спамерами, то описанный выше вариант вам вполне подойдет.

Давайте, кстати, разберемся, почему не работает оригинальный код DCaptcha, который был в нем по умолчанию:

wp_set_comment_status ($id, 'delete');

Если мы обратимся к кодексу WordPress, то увидим, что для этой функции WP_SET_COMMENT_STATUS в новых версиях (начиная с версии 2.92) уже нет такого значения «delete». На данный момент можно использовать только значения: 'hold', 'approve', 'spam', or 'trash'.

Т.е. удалить порезанные плагином сообщения с помощью функции WP_SET_COMMENT_STATUS мы уже не сможем, как это можно было сделать с помощью выбора значения 'delete' в старых версиях WP.

В версиях движка, начиная с 2.92, мы можем с помощью функции WP_SET_COMMENT_STATUS только переместить мусорные сообщения в корзину (выбрав значение 'trash'), либо пометить их как спам (выбрав значение 'spam').

Для удаления порезанных спам-комментариев нам явно нужно будет использовать другую функцию, которая описана на этой странице кодекса. Это функция называется WP_DELETE_COMMENT. Поэтому в файле:

/wp-content/plugins/dimoning.ru-captcha/dimoning.ru-captcha.php

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

wp_set_comment_status ($id, 'delete');

на строку

wp_delete_comment ($id);

Сохраните произведенные изменения и протестируйте плагин на работоспособность. Теперь он должен будет исправно отсекать спамеров и пропускать только сообщения реальных посетителей вашего блога, поставивших галочку в поле «Я не робот». Причем, если вы не отключите корзину, то удаленные спам-комментарии будут попадать именно в нее.

Как отключить корзину в WordPress

Мне это показалось неприемлемым, ибо главной задачей использования спаморезки являлось не только избавление от мусора, но и снижение нагрузки WordPress на сервер хостинга, которая создавалась потоком этого мусора. Поэтому я решил вообще отключить корзину, ибо ее функции мною все равно были не востребованы. Из админки отключить ее не получится, для этого потребуется внести изменения в конфигурационный файл под названием WP-CONFIG.PHP.

Найти его вы сможете в корне удаленного хоста, подключившись к северу вашего хостинга по FTP. Откройте файл WP-CONFIG.PHP на редактирование и добавьте в него строчку кода:

define('EMPTY_TRASH_DAYS', 0);

Если вы по каким-либо причинам не захотите отключать корзину в Вордпресс на совсем, а только захотите уменьшить время хранения в ней записей, то вставьте в WP-CONFIG.PHP следующую строчку кода:

define('EMPTY_TRASH_DAYS', 3);

где вместо тройки вы можете поставить нужное вам количество дней, в течении которых корзина будет хранить записи до их удаления. Но я все же предпочел вообще отказать от корзины.

Удачи вам! До скорых встреч на страницах блога KtoNaNovenkogo.ru

Подборки по теме:

Комментарии и отзывы

adkot

Все ничего, но когда ставлю права доступа 777 для DCaptcha то Вордпресс вообще перестает работать, а когда переставлю обратно — все хорошо. Это как то можно исправить?

Gena

Можно ли без установки прав доступа использовать плагин?

Можно ли спомощью Total Comander 7.04a назначить права доступа?

Gena

Установил плагин DCaptcha на вордпресс, добавляю комментарий при этом галочку не ставлю появляется новая страничка (wrong captcha. no spam, please.)Далее ещё одна с надписью по русски. Перехожу на блог и вижу появившийся комментарий, тестировал всё на локал/блоге.

Илларион

Не знаю-не знаю. Я установил и у меня стало недоступно редактирование через админку и другие глюки на блоге начались. Сборка WP 2.9.2

Сем

А я установил. Вроде бы все правильно, но часть спама в вордпресс все равно приходит. Что не так?

blogmann

Какой оказалось эффективность WP капчи DCaptcha «Я не робот»

Сначала тоже было необычное воодушевление ) А на выходе — мафия бессмертна ©.

Наиль

После обновления версий wordpress перестал работать мой плагин защиты от спама, попробую плагин предложенный вами. Спасибо...

Маргарита

Открыла файл /wp-content/plugins/dimoning.ru-captcha/dimoning.ru-captcha.php

Там одни иероглифы. В чем может быть проблема?

Дмитрий

Маргарита: возможно, что в кодировке. Попробуйте открыть этот файл в Notepad++

barkan

рекомендую использовать Akellapad вместо Notepad++, хотя оба хороши, но первый лучше справляется с большими файлами

Роман

а у меня, если не поставить галочку, то коммент не публикуется, но в админке вордпресс он есть, и нужно его подтвердить/удалить. И когда возвращаешься назад, пытаешься опубликовать еще раз, при отмеченной галочке «Это не спам» он уже не публикуется, пишет: «Дубликат комментария удалён. Кажется, вы уже сказали это!»

Алексей Владимирович

А я вообще искал — Gravatar, здесь нашел, все настроил очень спасибо, что название напомнили, теперь с лицом..., спасибо

Василий Сенченко

Здравствуйте!

Помогите, пожалуйста. Я на своем сайте в админке на Вордпресс навел курсор на фото в комментариях и выбрал «Блокировать изображение от 0.gravatar.com» Все граватары исчезли с сайта. Подскажите, как восстановить граватары?

Василий Сенченко, психолог

Anton

кому захочется поменять капчу, вот новая, боты её не прошибают https://www.keycaptcha.com/

BagiraL

Походила по коду, разобралась, что к чему, убрала ссылку на dimong.ru, а то, как бельмо на глазу! Даже немного со слоганом похулиганила... Ну да ладно...

Блог у вас отличный, все, что нужно в одном месте. Но, извините меня, я, может, «чайник» в этом, но что-то с навигацией не то! Чтобы попасть назад в эту статью на комменты, пришлось через Историю залезть. Не смогла найти статью через рубрикатор.

Василий

Вместо каптчи, у меня Akismet стоит — спам отлично отсеивает.

Валерий

Лучши всяких каптч и Аксиметов — изменение имен стандартных полей в файлах comment.php темы и wp-comments-post.php движка. Всего и делов-то на пару минут, а 98% автоматического спама отсекается сразу и навсегда без всяких геммороев и проблем с каптчами.

Василий Сенченко

Валерий: Можно ли попросить вас дать консультацию по вашему предложению. Почтовый ящик на моем сайте. Заранее благо дарю вам!

Alex

Установил этот плагин на один из своих сайтов, если чесно работает он как то не на 100%, бывает нужное отсеивает, хотя по большому счету спам удаляет. Спасибо за хорошую статью.

Александр

А меня Акисмет подвел. Я попробовал на своем блоге оставить комментарий как пользователь и попал в спам. Буду думать о каптче. Спасибо за инфу!

Valeron

А у меня при добавлении комментария вот такая фигня выскакивает

Warning: fopen (/home/p39272/www/site/wp-content/plugins/dimoning.ru-captcha/num/num.txt) [function.fopen]: failed to open stream

Сергей

Здравствуйте!

На днях сменил логин в админке, но e-mail оставил прежним. Граватар исчез, почему-то, в моих старых комментариях; в новых отображается нормально. Как их можно связать, подскажите, пожалуйста?!

Заранее благодарю за ответ!

Сергей

Здравствуйте!

Спасибо за прекрасную статью!))

Наконец-то, ссылки в комментариях у меня в новом окне открываются))) Давно мечтал об этом))

Будет ли продолжение темы оформления комментариев??? Очень много вопросов, если честно))

С искренним уважением!

Никита

Отличная статья, спасибо автору!

Андрей

Плагин и правда супер. Но скажите мне, пожалуйста, как мне сделать так, чтобы он выводился как у вас с левого края — у меня сам квадратик ровно посередине страницы, а затем с огромным отступом фраза «Я не робот» частично переходящая на следующую строку. Спасибо.

Эдуард

Спасибо, отличная штука.

У меня один вопрос почему Вы не меняете текст сообщения: «wrong captcha. no spam, please.», если галочка не поставлена на Это не спам?

Люди же могут не понять что нужно нажать на эту галочку и перейдя на страницу с предложением на английском языке просто могут покинуть ваш сайт...

Или ее нельзя менять в коде на русский текст так как он будет не корректно отображаться?

п.с. Очень хотелось бы услышать ответ) Спасибо.

Сергей

Пишет что неправильная капча

Сергей

Плохой плагин тем, что если установишь, то хрен удалишь!!! Приходится вместе с «Корнями выдирать отовсюду».

Иван

А почему у вас сейчас капчи нет?

Наталья

Дмитрий, так получилось что в своем блоге Елена_Ориас я сделала тебе рекламу в посте, да еще и в комментариях кое-что написала. Считаю что за тобой теперь долг 😉 Пожалуйста, если сможешь, объясни прям там, в блоге, как сделать для доверенных комментаторов отсутствие капчи.

Юрий

Здравствуйте, не подскажете где его можно скачать, в админке нету, устарел видимо и убрали или как то по другому называется? Спасибо!

Дмитрий

Юрий: в статье есть прямая ссылка на скачивание.

Александр

Здравствуйте!

Помогите, пожалуйста, удалить плагин DCaptcha!

Никак не получилось удалить ссылку на сайт разработчика. Она висит прямо возле окна, в котором нужно ставить галочку. Так, что в окно ткнуть невозможно — нажимается ссылка.

Плагин я деактивировал и удалил. Но, что весьма интересно, форма и ссылка остались!

Помогите удалить исходящую ссылку окончательно!

Djo

А я в борьбе с спамом решил пойти своим путём и написал свой плагин. Всю логику по оценке спама возложил на сервис Яндекс.Чистый Веб. Собственно вот что получилось http://wordpress.org/plugins/spam-oborona-yandexcleanweb/

ivan

wrong captcha. no spam, please. как перевести на Русский? Если меняю то выходят каркозябры?

ivan

подскажите как сделать как у вас!

Это не спам (обязательно)

Оповещать о новых комментариях по почте

было размещено как у вас? После поля сообщения?

Подписаться не комментируя