Gloobus Опубликовано 24 августа, 2014 Жалоба Поделиться Опубликовано 24 августа, 2014 В блоге начали появляться спамные комментарии. Самое интересное, я не могу понять как они туда попадают? Комментарии на английском, я в BlogView.php сделал проверку на то, что если в тексте комментария нет хоть одной русской буквы, то вылезает ошибка и комментарий не добавляется. На форме все работает отлично, тем не менее, комментарии проходят!Такое ощущение, что есть где то ещё какой то скрипт, через который происходит добавление комментариев? Да, нашел... это мой доп.код был. Но все равно, у многих лезет спам! Что бы как то защититься я сделал следующее:1. Добавил скрытое текстовое поле "phone" на форму, заполнить которую может только робот. В случае если поле заполнено, то ругаюсь ошибкой на не верную капчу.2. Сделал проверку preg_match("/[а-яА-ЯёЁ]+/u", $xxx) на имя автора комментария и текст комментария. Если в этих двух полях нет хотя бы одной русской буквы, то будет ошибка. Владельца магазина это устраивает, ибо иностранных комментариев у него нет и не нужны Идеи:Убрать капчу и заменить ее какой то своей наработкой, пусть даже более простой, но не массовой как капча симплы, что бы только лишь ради одного магазина не стали писать робота, Цитата Ссылка на сообщение Поделиться на другие сайты
root Опубликовано 30 августа, 2014 Жалоба Поделиться Опубликовано 30 августа, 2014 Ваше решение помогло избавиться от спама ? Не могли бы вы пошагово расписать, как реализовать эти два пункта у себя. Спасибо Цитата Ссылка на сообщение Поделиться на другие сайты
Gloobus Опубликовано 3 сентября, 2014 Автор Жалоба Поделиться Опубликовано 3 сентября, 2014 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'); } Все, теперь у нас при попытке добавить комментарий, где в имени и тексте комментария нет хотя бы одной буквы кириллического алфавита, будет выводиться соответсвующая ошибка. ЭТО пример только для комментарий к товарам!!! По аналогичному сценарию все тоже самое необходимо проделать для комментарий к записям блога, туда спам тоже лезет. В магазине одного заказчика я реализовал сразу оба этих способа, больше спама не было. Возможно будет достаточно только первого способа со скрытым полем. Цитата Ссылка на сообщение Поделиться на другие сайты
daramal Опубликовано 18 декабря, 2014 Жалоба Поделиться Опубликовано 18 декабря, 2014 Спасибо большое! Отличное решение. Использовал 1-й вариант. Пока левых комментах не видать )) Цитата Ссылка на сообщение Поделиться на другие сайты
larenso Опубликовано 2 июля, 2015 Жалоба Поделиться Опубликовано 2 июля, 2015 Спасибо большое. Помогло ) Цитата Ссылка на сообщение Поделиться на другие сайты
xavior Опубликовано 1 августа, 2017 Жалоба Поделиться Опубликовано 1 августа, 2017 (изменено) Благодарю! Наконец-то избавился от спама в комментариях, под 150 в день было.. Первого метода мне оказалось абсолютно достаточно Изменено 1 августа, 2017 пользователем xavior Цитата Ссылка на сообщение Поделиться на другие сайты
andreas81 Опубликовано 10 июня, 2019 Жалоба Поделиться Опубликовано 10 июня, 2019 Я считаю это хорошее решение проблемы. Наверное нужно колдовать с переменными и файлами чтоб поставить такую проверку на сообщения в обратной связи. Цитата Ссылка на сообщение Поделиться на другие сайты
jamaica Опубликовано 5 августа, 2019 Жалоба Поделиться Опубликовано 5 августа, 2019 Первый способ работает на УРА на страницах с комментариями, а вот на странице фидбека никак не получается прикрутить.Подскажите, пожалуйста, куда копать require_once('View.php'); class FeedbackView extends View { function fetch() { $feedback = new stdClass; if($this->request->method('post') && $this->request->post('feedback')) { $feedback->name = $this->request->post('name'); $feedback->email = $this->request->post('email'); $feedback->message = $this->request->post('message'); $anti_bot = $this->request->post('phone'); $this->design->assign('name', $feedback->name); $this->design->assign('email', $feedback->email); $this->design->assign('message', $feedback->message); $this->design->assign('comment_phone', $anti_bot); if(empty($feedback->name)) { $this->design->assign('error', 'empty_name'); } elseif(empty($feedback->email)) { $this->design->assign('error', 'empty_email'); } elseif(empty($feedback->message)) { $this->design->assign('error', 'empty_text'); } elseif (!empty($anti_bot)) { $this->design->assign('error', 'captcha'); } else { $this->design->assign('message_sent', true); $feedback->ip = $_SERVER['REMOTE_ADDR']; $feedback_id = $this->feedbacks->add_feedback($feedback); // Отправляем email $this->notify->email_feedback_admin($feedback_id); } } if($this->page) { $this->design->assign('meta_title', $this->page->meta_title); $this->design->assign('meta_keywords', $this->page->meta_keywords); $this->design->assign('meta_description', $this->page->meta_description); } $body = $this->design->fetch('feedback.tpl'); return $body; } } Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 5 августа, 2019 Жалоба Поделиться Опубликовано 5 августа, 2019 Первый способ работает на УРА на страницах с комментариями, а вот на странице фидбека никак не получается прикрутить. Подскажите, пожалуйста, куда копатьПолностью по аналогии. Если не выходит, то просить специалистов за денежку... Цитата Ссылка на сообщение Поделиться на другие сайты
Russ Опубликовано 23 августа, 2019 Жалоба Поделиться Опубликовано 23 августа, 2019 Спасибо за решение! Только что сделал сам ручками Аж приятно. Просто шел по инструкции написанной автором. При много благодарен! Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.