Конструктор форм - запрет СПАМА, не работает

InstantCMS 1.X

Доработка конструктора форма, для больбы со СПАМОМ

#1 25 марта 2018 в 11:02
Добрый день!
Описываю проблему.
Сайт по продаже насосов, версия 1.9, со своим дизайном.
На моем сайте созданы несколько Форм (Бланк заказа, Заявка, подбор насосов по параметрам и т.д.).
Через форму Бланк заказа стал приходить СПАМ, примерное содержание:
ФОРМА: Бланк заказа
----------------------------------------------
Раздел: Насосы

Наименование оборудования: Kz_AkTaU_ Kz_AlIeV_Kz

Количество: Евгения Зубенко

Дополнительная информация:
Раиса Родакова \r\nоткрой
\r\ЗДЕСЬ ССЫЛКА КУДА-ТО ТАМ...

Контактное лицо: Андрей *

Организация, должность: Константин Рачков

Телефон: 89910000682

Первое, что я решил сделать это уменьшить длину поля Количество, и сейчас она составляет 3 символа. Это решение не помогло, письма приходят и как видно в поле количество: Евгения Зубенко.
Затем я через базу данных определил ID поля и прописал условие в файле /components/forms/frontend.php
//Проверка формы Бланк заказа — начало
if ((strlen($field['id']=141)>3)) // проверяет чтобы длина текста в поле была не более 3 символов
{
cmsCore::addSessionMessage($_LANG['FORM_NUMBERS'], 'error');
$inCore->redirectBack();
}
//Проверка формы Бланк заказа — конец
Сам проверил решение, оно работает если я это делаю как человек на сайте, но БОТ свободно обходит данную проверку.
Вот лог движения БОТа:
131.153.40.190 — - [25/Mar/2018:02:21:43 +0200] "GET / HTTP/1.0" 200 38562 "мой сайт/"
131.153.40.190 — - [25/Mar/2018:02:21:44 +0200] "GET /kontaktnaja-informacija
131.153.40.190 — - [25/Mar/2018:02:21:44 +0200] "GET /blank-zakaza.html
131.153.40.190 — - [25/Mar/2018:02:21:45 +0200] "GET /includes/codegen/cms_codegen.php
131.153.40.190 — - [25/Mar/2018:02:21:46 +0200] "POST /forms/process
131.153.40.190 — - [25/Mar/2018:02:21:50 +0200] "GET /blank-zakaza.html

Прошу помощи, если кто знает как заставить проверят поля по условиям (длина поля, только цифры и т.д)
#2 25 марта 2018 в 13:39
Yossarian, попробуйте другое решение, создайте в форме выпадающий список обязательный к заполнению, НО первое значение должно быть не заполненным.
Примерно так:


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

Пару раз получал с неё спам, после этого создавал новое подобное поле и все...

У меня так давно сделано. Но может быть я не интересен спамерам))
#3 25 марта 2018 в 20:55
Добрый день!
Спасибо, пока сделал как вы посоветовали, пересоздал поле Разделы и вставил список с пустым первым пунктом.
Сижу жду, завтра станет ясно прошел бот защиту или нет.

Но мне все равно не понятно, почему созданная защита с длинной поля НЕ РАБОТАЕТ?
Почему моя доработка в файле /components/forms/frontend.php не работает?

  1. if ($do=='processform'){
  2.  
  3. $errors = false;
  4.  
  5. $fields = $inCore->request('field', 'array_str');
  6. if(!$fields) { cmsCore::addSessionMessage($_LANG['FORM_ERROR'], 'error'); $inCore->redirectBack(); }
  7.  
  8. //Проверка формы Бланк заказа - начало
  9. if ((strlen($field['id']=141)>3))
  10. {
  11. cmsCore::addSessionMessage($_LANG['FORM_NUMBERS'], 'error');
  12. $inCore->redirectBack();
  13. }
и самое главное, когда я прописываю проверку символов для field_id=131 (это поле для Дополнительной информации, сюда бот и вставляет ссылку), она тоже не работает:
  1. if (!preg_match("/^([а-яА-Я])+$/i", ($field['id']=131)))
  2.  
  3. {
  4. cmsCore::addSessionMessage($_LANG['FORM_HTTP01'], 'error');
  5. $inCore->redirectBack();
  6. }
Как заставить проверят конкретные поля по условиям?
#4 26 марта 2018 в 08:27


Yossarian, попробуйте другое решение, создайте в форме выпадающий список обязательный к заполнению, НО первое значение должно быть не заполненным.
Примерно так:


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

Пару раз получал с неё спам, после этого создавал новое подобное поле и все...

У меня так давно сделано. Но может быть я не интересен спамерам))

Rainbow

Добрый день!

К сожалению Ваше решение не помогло, сегодня пришло два СПАМ сообщения с разных форм.
Может кто-то другой поможет. А пока наверное нужно будет отключить все формы.
#5 26 марта 2018 в 10:54

А пока наверное нужно будет отключить все формы.

Yossarian
Можно попробовать через .htaccess.
После указания директив:
order allow, deny
allow from all
написать следующий код,
<files page.html>
allow from all
deny from 131.153.40.190
</files>
где page.html – это Ваша страница.
Не исключается вариант отдельного .htaccess в нужном каталоге, т. к.
в Вашей версии CMS — Формы делались дополнительно.
#6 26 марта 2018 в 10:59
А капчу туда никак нельзя прикрутить?
#7 26 марта 2018 в 11:57

А капчу туда никак нельзя прикрутить?

Jestik
Возможно и довольно простую (но с использованием бутстрапа).
Демо — тут.
Скачать — здесь.
Можно поискать аналог без бутстрапа.
#8 27 марта 2018 в 09:46
Всем привет!
Большое спасибо все за участие в решение проблемы.
Я готов прикрутить капчу от Google, вопрос как это сделать. Нужно знать процедура, у гугля просто написано.
Зарегистрируй сайт, получи код, затем вставь скрипт и код, я так и сделал но работает пока стандартная капча.
Как подключить Google, я не понимаю.
#10 27 марта 2018 в 11:30


Я готов прикрутить капчу от Google, вопрос как это сделать.

Yossarian

На первую ветку, все многие эту ставили:
instantcms.ru/blogs/blog-razrabotchika/simpla-captcha-perezagruzka.html

Rainbow

Почитал, но как то не впечатляет. Вопрос не деньгах.
Я хочу что-бы Спамеры боролись не с моим сайтом а с Гуглем.
Поэтому желательно ReCaptcha, пока читаю документацию.
#11 28 марта 2018 в 01:44
Попробуйте исправить

if (strlen($fields['141'])>3)
#12 28 марта 2018 в 09:11
Привет всем!
Сегодня у меня очень радостная новость, потому как я смог решить задачу описанную в данной теме.
Опишу свое решение с комментариями.
Первое на, что я обратил внимание, так это на то что робот обходит мои ловушки и я понял, что он обращается на прямую в базу данных и туда заливает свою информацию. Т.е. бот получает из базы данных список полей Формы, заполняет их, и отправляет назад.
Вторым моим рассуждением стал анализ задач бота, главная задача бота, это публикация ГОВНО-ссылки на свой ресурс. Далее я подумал ЛЮБАЯ ссылка имеет вид: имя сайта, имя сайта и т.д.
Подсказку я нашел в интернете в темах про регулярные выражения.
Итак я вставил в файл /components/forms/frontend.php следующее выражение (у меня это строки 107-110)
  1. } else {
  2. [code=php]$mail_message .= '<h3>'.$field['title'] . ':</h3>' . $fields[$field['id']];[/code]
  3. }
  4. // НАЧАЛО мой код запрещающий ЛЮБЫЕ ссылки
  5. if (preg_match("/http:\/\/|https:\/\/|ftp:|www|.com|.net|.ru/", ($fields[$field['id']]))) {
  6. cmsCore::addSessionMessage($_LANG['FORM_HTTP01'], 'error');
  7. $inCore->redirectBack();
  8. }
  9. // КОНЕЦ мой код запрещающий ЛЮБЫЕ ссылки
  10.  
Как видно из кода, я сначала позволяю боту заполнить все поля:

  1. $mail_message .= '<h3>'.$field['title'] . ':</h3>' . $fields[$field['id']];
А затем я проверяю ВСЕ поля формы на соответствие условиям. Прелесть данного способа в том, что фразы могут быть любыми и в любом количестве.
Не все кто использует наш любимый Инстант есть программистами, и я в том числе не программист.
Поэтому мои комментарии по коду:
if — логическое условие если
preg_match — поиск совпадений;
"/ — это начало перечисления символов;
/" — конец перечисления;
| — через прямые разделители перечисляем те символы, которые хотим запретить (я запретил: , , ftp:, www, .com, .net, .ru).
Обратной слешью экранируем те символы, которые используются в качестве служебных при построении регулярных выражений, в частности прямые слеши. (ПРИМЕР выражение , два косых слеша экранируем обратным слешом и получаем вместо них \/ \/).
$fields[$field['id']] — переменная которую я проверяю

Ну вот пожалуй и все. Тему пока прошу не закрывать, т.к. я хочу внедрить данный метод в форум. Решение опишу здесь же.

Всем удачи!!!
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.