Поиск на сайте:

Поиск в Яндексе:


Проверка Google PageRank сайта:

URL сайта вводите: http://ваш сайт


Полный анализа продвижения сайта Вы можете сделать, если воспользуетесь инструментом Web-site analyzer.

Также, Вы можете получить индикатор значений Яндекс тИЦ и Google PageRank для Вашего сайта


Управление:

Как закрыть путь для спама Вашего блога на WordPress.

Спам моих сайтов на WordPress стал для меня непосильным. На некоторых сайтах доходило до 2 тысяч спам-сообщений в сутки. Такое количество спама по воздействию уже равно xSS или DDOS атаке на сайт. Потому, что сайт уже просто виснет и перестает грузиться.

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

Суть данного способа в том, что спамерские скрипты настраиваются по умолчаниям движков атакуемых сайтов. Т.е. в нашем случае по умолчаниям Вордпресса. А по этим умолчаниям комментатор должен заполнить поля "Имя" (имеющее name="author" и id="author"), E-mail (имеющее name="email" и id="email"), и текстареа самого сообщения.

То есть спамерский скрипт настроен на поиск на странице данных полей по name или id. Вот и подстроим ему ловушку в виде поля, которое он ищет на странице, но из этой ловушки данные не будут передаваться никуда. А для нормального комментатора (чтоб его не путать выбором) уберем эту ловушку со страниц сайта в скрытый div за пределы видимой области экрана.

В итоге E-mail адрес комментатор-человек будет вписывать в поле на странице (только это поле будет иметь другой name и id) и его коммент будет добавляться. А робот-спамер же будет вписывать свое мыло в скрытом от человеческого глаза диве (так как он его искал) и в результате пролетать, как фанера над Парижем.

Дополнительный совет тем, кто будет использовать данный способ (если Вы достаточно подкованы для этого :) ): лучше изменить на свои названия из кода, приведенного ниже, для заново присваиваемых имени и id поля E-mail и дива, т.е. заменить в данном коде слова "adres-em" и "hunter".

Итак, сам способ:

В файлах comments.php и comments-popup.php шаблона темы находим примерно такие строку:

  1.  
  2. <input type="text" name="email" id="email" value="<?php echo $comment_author_email; ?>" size="22" tabindex="2" />
  3.  

заменяем на:

  1.  
  2. <div class="hunter"><input type="text" name="email" id="email" value="" size="22" maxlength="1" tabindex="2" /></div>
  3.  
  4. <input type="text" name="adres-em" id="adres-em" value="<?php echo $comment_author_email; ?/>" size="22" tabindex="2" />
  5.  

В файле style.css шаблона темы для вывода поля-ловушки в 1000px слева от экрана компьютера добавляем в конце:

  1. .hunter {position : absolute; left : -1000px; }

Где в скрытом диве за пределами экрана (на 1000 пикселей левее видимой области экрана) создается аналогичное поле с именем и id которые предусмотрены в WordPress для E-mail комментаторов по умолчанию. Из этого поля не передается параметр $comment_author_email. Дополнительный параметр maxlength="1" определяет возможность вписать только 1 символ, что противоречит установкам WordPress при проверке адреса E-Mail. Т.к. WordPress проверяет наличие символа "@" в емэйле.

Далее переопределяем в скрипте WordPress name и id поля, из которого скрипт должен брать адрес E-mail комментатора таким образом:

В файле wp-comments-post.php, который лежит в корне сайта находим примерно такие строки:

  1. $comment_author = trim($_POST['author']);
  2. $comment_author_email = trim($_POST['email']);
  3. $comment_author_url = trim($_POST['url']);
  4. $comment_content = trim($_POST['comment']);

Заменяем их на:

  1. $spam_test_field = trim($_POST['email']);
  2. if(!empty($spam_test_field)) wp_die('NO SPAM!');
  3.  
  4. $comment_author = trim($_POST['author']);
  5. $comment_author_email = trim($_POST['adres-em']);
  6. $comment_author_url = trim($_POST['url']);
  7. $comment_content = trim($_POST['comment']);


RSS feed | Trackback URI

Комментарии

Tapac   2008-07-04 10:28:00

Хех, а не проще ли просто скрыть поле, если уж всё равно бот будет его заполнять?

Одмин   2008-09-29 07:33:19

Поле для бота и так скрыто, оно за пределами экрана. Человек его не видит. Но ведь оно должно присутствовать в исходном коде страницы, бот его должен находить, чтоб заполнить. Скрыть можно по разному, это один из вариантов. Или я вопрос не понял?

 
 
Darmoid   2008-07-17 23:52:34

Я чего то не понимаю. А зачем то второе поле? Неужели не проще просто переименовать поля в файле и в цсс соответственно и все. Пускай бот ищет поле и не находит ))

Одмин   2008-09-29 07:29:04

Так пусть бот находит поле, считает, что запостил и передает хозяину ОК. :)
Потом, наличие этого поля-ловушки дает возможность наладить скрипту с нашей стороны проверять это поле на непустоту и, соответственно, применить какие-либо репрессии к спамеру… Но это уже другая задачка…

 
 
4et   2008-08-29 07:54:05

Как-то встретил этот прием защиты от спама на забугорном сайте - понравилось. Но разбираться влом было. А Вы разложили по полочкам. Спасибо.

 
Шинкарев   2008-09-12 17:12:20

Элегантное решение. К сожалению, на половине сайтов не удалось заставить работать. Там, где в “wp-comments-post.php” используется
trim(strip_tags($_POST[’author’]))

Не подскажете решения этой проблемы?
Спасибо.

Одмин   2008-09-29 20:05:05

А при чем trim(strip_tags($_POST[’author’]))?
Подробней напиши в чем проблема.
У меня этот вариант работает без проблем на сайтах с WP версий 2.0.9 - 2.3.3 (Выше версии не юзаю по причинам жалоб некоторых хостеров на большую загрузку серверов и с версии 2.5 WP, к сожалению, слишком много цинкует на wоrdprеss.оrg)

 
 
Privet   2008-09-16 14:07:01

Все гениальное просто, благодарю.
Установил, но только применительно к полю comment.

 
Андрей   2008-09-27 22:07:00

А почему бы полю email не установить css атрибут display:hidden? Как по мне это более элегантный способ его спрятать. Или есть возможность для спамеров отловить такую установку?

Одмин   2008-09-29 07:36:34

Вы сами же и ответили на вопрос. Точно не знаю, но предполагаю, что именно так. Слишком стандартное решение…

 
 
Андрей   2008-09-27 22:09:04

Да, и еще… Кажется с полем comment — все же намного лучше делать.

Дело в том что только что, перед тем как запостить комент, табом прошелся по полям и наверное в спрятанное поле что-то написал и в результате я получил страничку генерируемую wp_die с неприличным выражением…

Одмин   2008-09-29 07:38:54

В приведенном выше коде неприличное выражение, употребленное мной на этом сайте, заменено на “NO SPAM!”

 
 
Андрей   2008-09-27 22:16:02

Ошибся немного, нужно было написать так:
“А почему бы полю email не установить css атрибут display:none?

Одмин   2008-09-29 07:40:57

По причинам, аналогичным приведенным в ответе Вам выше.

 
 
DjoniLee   2008-09-28 18:56:34

Классный способ защиты! Спасибо, буду использовать на своих сайтах!

 
Семеныч   2008-10-15 08:58:53

Да вроде как от автомата прекрасно спасают плагины. Не знаю зачем вы что придумываете =)
Вот ручные комменты со ссылками в точках и смайлах это беда…
PS Способ хороший, но запоздалый

Одмин   2008-10-15 11:05:13

1. >способ, дающий наилучший результат и в то же время самый легкий для работы движка и баз MySQL
2. базы данных не засоряются, т.к. через плагины спам-комменты вносятся в базу.
3. каждуй плагин это дополнительная нагрузка на сервер + дополнительная уязвимость.

Думаю этих причин достаточно…

 
 
Семеныч   2008-10-15 14:19:04

Ну если только в нагрузке дело.. тогда согласен…

 
avatar   2008-10-27 19:57:33

Круто, поставил почти на все сайты, не одного спама не приходило

Одмин   2008-10-28 04:25:33

Только зачем на вашем сайте двойное поле name=”e-m-a-i-l” ?

 
 
Макс   2008-11-06 14:25:27

35-ая - 38-ая строки:

Меняем на этот код —-

$comment_author = trim(strip_tags($_POST[’author’]));
$comment_author_email = trim($_POST[’email’]);
$comment_author_url = “”;
$comment_content = trim(strip_tags($_POST[’comment’]));

И 1. нам никто не оставляет никаких ссылок в коментах :)

Одмин   2008-11-06 18:47:04

Проще тогда удалить поле ввода урла комментатора из шаблонов comments.php и comments-popup.php темы. Но это не спасает от ссылок в тексте комментария.

 
 
Васильич   2008-11-09 18:55:41

А чем плох старый метод - забить базу бота ложными e-mail.
perl-скрипт для этого есть.

Одмин   2008-11-10 08:17:59

Ссылки из Вашего коммента удалил, т.к. предлагаемый скрипт не имеет никакого отношения к WordPress даже в перспективе, т.к. скрипт на Perl, а не PHP.

 
 
Sergio   2008-11-26 03:12:16

Идея хорошая…я еще чуть веселее сделал.

Перемешал поля Имя и Е-mail.
Т.е. робот сейчас постит эти поля в обратной очереди ;-)
и соответственно мейл не проходит проверку на валидность

 
Игрекс   2008-12-21 01:15:24

У меня после установки этого кода стало невозможно размещать комменты в IE. Пишет “comment can not be empty” всегда…

Одмин   2008-12-22 23:11:41

Вероятно, у Вас где-то вкралась ошибка при установке кода. Попробуйте вернуть на дефолтную версию кода, проверить работу с ней, а потом ставить заново. Проведенный в статье код работоспособный на 100% - проверено неоднократно.

 
 
A1GP   2009-01-04 11:37:50

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

 
Георгий   2009-01-08 03:43:56

У Вас ошибка в коде, в ПХП функции стоит слэш (?/>) :wink_wp:

Одмин   2009-01-09 07:25:47

И точно… :rolleyes_wp: Поправил. Спасибо!

 
 
Дмитрий   2009-01-14 20:19:16

Что то у меня нифига не получается.
Дорвей у меня засыпает сайт по 3 раза в день, поставил wp-ban, не смог разобратся как он работает. Есть что то типа картинки, название которой надо ввести в ответ для того что бы определится что не бот ?

Одмин   2009-01-15 05:38:49

При этом способе ничего не будет на странице видно, никаких капч, картинок и ответов на вопросы. Просто люди будут заполнять нужные для добавления коммента поля, а боты поля, которых на экране нет. :biggrin_wp:

 
 
Рома   Подписаться на комментарии2009-01-20 01:17:43

А если я через мобилу лазию… она у меня css не поддерживает… фигней страдаете… написали бы лучше php скрипт для борьбы со спамом или фантазии ноль!?

Одмин   2009-01-20 11:18:01

Тут же речь о WordPress…

Рома   Подписаться на комментарии2009-01-20 15:52:27

А на сайт на вордпрессе через мобилу зайти нельзя что ли? смех…

Одмин   2009-01-20 22:57:55

Конечно можно.
>Тут же речь о WordPress - я имел в виду, что речь о защите сайта на WordPress от заспамливания роботами-спамерами (типа X-Rumer), а не о просмотре посетителями…
>фигней страдаете… смахивает на грубость.
>написали бы лучше php скрипт для борьбы со спамом - неконкретное предложение.

Romaldo   Подписаться на комментарии2009-01-20 23:23:42

в том то и дело что вы грубите пользователем у которых не работает css… и прятать div при помщи css это грубо и js всякие, без которых нормально на сайте не поработаешь… уводите свои инструменты в серверные скрипты, а не нагружайте клиетскую часть…
хоть прятаете вы форму или нет - все равно форма, “заполненная” спамером отправляется на сервер… так почему же на сервере со спамом не побороться???

Одмин   2009-01-22 08:21:48

Romaldo, давайте по порядку:
>в том то и дело что вы грубите пользователем у которых не работает css… и прятать div при помщи css это грубо и js всякие, без которых нормально на сайте не поработаешь…
Ответ: с одной стороны, на пользователей, у которых не работает css я не расчытываю, т.к. тогда придет другой пользователь с разрешением экрана на своей мобиле 240px и скажет, что сайт, сделанный под разрешение не менее 800px является грубостью - вывод: необоснованно, каждый сайтовладелец вправе делать свой сайт так, как хочет и для тех посетителей, на которых расчитывает; с другой стороны в принципе можно подписать поле внутри скрытого дива: “Для спам-роботов…” :jittery_tb: ; с третьей стороны создание этого поля в скрытом диве и не очень обязательно, т.к. вполне будет работать и простая замена имен полей, о чем и писалось в комментах к статье.

>уводите свои инструменты в серверные скрипты, а не нагружайте клиетскую часть…
хоть прятаете вы форму или нет - все равно форма, “заполненная” спамером отправляется на сервер… так почему же на сервере со спамом не побороться???
Ответ: Так при данном способе и происходит обработка на сервере. Притом только на сервере, который пытаются заспамить. А плагины типа Akismet еще создают и выполняют запрос в свою центральную базу, проверяя, не от спамера ли добавляемый коммент… Т.е. уже минимум два сервера в работе при добавлении каждого комментария получается. Коммент признанный Акисметом “спамерским” все равно добавляется в базу данных сайта, только с пометкой “спам” - значит еще и нагрузка на MySQL добавляется + база засоряется + Акисмет нередко ошибается, и нормальные комменты относит к спаму.
Надеюсь я ответил на Ваши вопросы.

 
 
 
 
 
 
Romaldo   Подписаться на комментарии2009-01-22 12:24:36

придет другой пользователь с разрешением экрана на своей мобиле 240px и скажет, что сайт, сделанный под разрешение не менее 800px является грубостью
ответ : он этого не заметит, так как у него отключен css, и если у вебмастера валидный html - то проблем с отображением не возникнет, и как раз скрытые объекты через css будут всплывать и раздражать… я все сказал

 
Имя (заполнять обязательно)
E-mail (не публикуется, заполнять обязательно)

Сайт

Ваш комментарий (увеличить поле | уменьшить поле)


Предпросмотр добавляемого комментария

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

Трекбеки на этот пост