Перейти к содержимому


Фото
* * * * * 1 голосов

Спам в комментариях блога


  • Чтобы отвечать, сперва войдите на форум
5 ответов в теме

#1 Gloobus

Gloobus
  • Фрилансер
  • 133 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Москва

Опубликовано 24.08.2014 - 13:13

В блоге начали появляться спамные комментарии. Самое интересное, я не могу понять как они туда попадают? Комментарии на английском, я в BlogView.php сделал проверку на то, что если в тексте комментария нет хоть одной русской буквы, то вылезает ошибка и комментарий не добавляется. На форме все работает отлично, тем не менее, комментарии проходят!

Такое ощущение, что есть где то ещё какой то скрипт, через который происходит добавление комментариев?

 

Да, нашел... это мой доп.код был.

 

Но все равно, у многих лезет спам! Что бы как то защититься я сделал следующее:

1. Добавил скрытое текстовое поле "phone" на форму, заполнить которую может только робот. В случае если поле заполнено, то ругаюсь ошибкой на не верную капчу.

2. Сделал проверку preg_match("/[а-яА-ЯёЁ]+/u", $xxx) на имя автора комментария и текст комментария. Если в этих двух полях нет хотя бы одной русской буквы, то будет ошибка. Владельца магазина это устраивает, ибо иностранных комментариев у него нет и не нужны :)

 

Идеи:

Убрать капчу и заменить ее какой то своей наработкой, пусть даже более простой, но не массовой как капча симплы, что бы только лишь ради одного магазина не стали писать робота,



#2 root

root
  • Пользователь
  • 45 сообщений

Опубликовано 30.08.2014 - 13:58

Ваше решение помогло избавиться от спама ? Не могли бы вы пошагово расписать, как реализовать эти два пункта у себя. Спасибо



#3 Gloobus

Gloobus
  • Фрилансер
  • 133 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Москва

Опубликовано 03.09.2014 - 09:21

root,

Да, мне это помогло

 

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

И так, для начала попробуем добавить скрытое поле в форму комментария. Пользователь его видеть не будет, следовательно не заполнит, а робот будет пытаться заполнить все, что видит в <form>

1. Открываем design/ваш_шаблон/html/product.tpl и добавляем куда нибудь внутри

<form class="comment_form" method="post">
...
</form>

следующее поле:

<input class="input_phone" type="text" id="comment_phone" name="phone" value="{$comment_phone|escape}"/>

2. Открываем design/ваш_шаблон/css/style.css и куда нибудь в конец добавляем:

#comment_phone {visibility:hidden; height:1px; width:1px}

3. Открываем view/ProductView.php и после

$captcha_code   = $this->request->post('captcha_code', 'string');

вставляем это:

$anti_bot = $this->request->post('phone');

Чуть ниже, после 

$this->design->assign('comment_name', $comment->name);

добавляем строку:

$this->design->assign('comment_phone', $anti_bot);

Еще чуть ниже, после проверки

elseif (empty($comment->name))
{
	$this->design->assign('error', 'empty_name');
}

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

elseif (!empty($anti_bot))
{
	$this->design->assign('error', 'captcha');
}		

В итоге мы получаем... Если данное скрытое поле было заполнено - это робот! Не производим добавление комментария и возвращается ошибка о неверно введеной капче

 

Проверка имени и текста комментария на содержания в них хотя бы одного кириллического символа

Если вам не нужны комментарии полностью на иностранных языках или в транслите, то этот способ тоже имеет место быть

1. Открываем design/ваш_шаблон/html/product.tpl и после 

{elseif $error=='empty_comment'}
Введите комментарий

добавляем:


{elseif $error=='non_russian_name'}
Имя должно быть на русском языке    

{elseif $error=='non_russian_text'} Комментарий должен содержать русские слова

2. Открываем view/ProductView.php и после.

elseif (empty($comment->name))
{
	$this->design->assign('error', 'empty_name');
}

вставляем проверку:

elseif (!preg_match("/[а-яА-ЯёЁ]+/u", $comment->name))
{
	$this->design->assign('error', 'non_russian_name');
}	

Еще чуть ниже после 

elseif (empty($comment->text))
{
	$this->design->assign('error', 'empty_comment');
}

добавляем:

elseif (!preg_match("/[а-яА-ЯёЁ]+/u", $comment->text))
{
	$this->design->assign('error', 'non_russian_text');
}		

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

 

ЭТО пример только для комментарий к товарам!!! По аналогичному сценарию все тоже самое необходимо проделать для комментарий к записям блога, туда спам тоже лезет.

 

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



#4 DarAmal

DarAmal
  • Пользователь
  • 617 сообщений
  • Дизайн, Верстка
  • Версия CMS:2.x

Опубликовано 18.12.2014 - 09:24

Спасибо большое!

 

Отличное решение. Использовал 1-й вариант. Пока левых комментах не видать ))



#5 larenso

larenso
  • Пользователь
  • 60 сообщений
  • Дизайн, Программирование, Верстка, SEO
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 02.07.2015 - 13:07

Спасибо большое. Помогло )



#6 xavior

xavior
  • Фрилансер
  • 290 сообщений
  • Дизайн, Программирование, Верстка, Заказчик
  • Версия CMS:1.x, 2.x
  • Откуда:Bombay

Опубликовано 01.08.2017 - 14:27

Благодарю! Наконец-то избавился от спама в комментариях, под 150 в день было..  :) Первого метода мне оказалось абсолютно достаточно


Изменено: xavior, 01.08.2017 - 14:27





0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых