Доработка конструктора форма, для больбы со СПАМОМ
Описываю проблему.
Сайт по продаже насосов, версия 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
Прошу помощи, если кто знает как заставить проверят поля по условиям (длина поля, только цифры и т.д)
Примерно так:
То есть, только выбранное заполненное значение, будет являться, выполненным.
Пару раз получал с неё спам, после этого создавал новое подобное поле и все...
У меня так давно сделано. Но может быть я не интересен спамерам))
Спасибо, пока сделал как вы посоветовали, пересоздал поле Разделы и вставил список с пустым первым пунктом.
Сижу жду, завтра станет ясно прошел бот защиту или нет.
Но мне все равно не понятно, почему созданная защита с длинной поля НЕ РАБОТАЕТ?
Почему моя доработка в файле /components/forms/frontend.php не работает?
if ($do=='processform'){ $errors = false; $fields = $inCore->request('field', 'array_str'); if(!$fields) { cmsCore::addSessionMessage($_LANG['FORM_ERROR'], 'error'); $inCore->redirectBack(); } //Проверка формы Бланк заказа - начало { cmsCore::addSessionMessage($_LANG['FORM_NUMBERS'], 'error'); $inCore->redirectBack(); }
{ cmsCore::addSessionMessage($_LANG['FORM_HTTP01'], 'error'); $inCore->redirectBack(); }
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 — Формы делались дополнительно.
Большое спасибо все за участие в решение проблемы.
Я готов прикрутить капчу от Google, вопрос как это сделать. Нужно знать процедура, у гугля просто написано.
Зарегистрируй сайт, получи код, затем вставь скрипт и код, я так и сделал но работает пока стандартная капча.
Как подключить Google, я не понимаю.
Я готов прикрутить капчу от Google, вопрос как это сделать.
На первую ветку,
instantcms.ru/blogs/blog-razrabotchika/simpla-captcha-perezagruzka.html
Я готов прикрутить капчу от Google, вопрос как это сделать.
На первую ветку,всемногие эту ставили:
instantcms.ru/blogs/blog-razrabotchika/simpla-captcha-perezagruzka.html
Почитал, но как то не впечатляет. Вопрос не деньгах.
Я хочу что-бы Спамеры боролись не с моим сайтом а с Гуглем.
Поэтому желательно ReCaptcha, пока читаю документацию.
if (strlen($fields['141'])>3)
Сегодня у меня очень радостная новость, потому как я смог решить задачу описанную в данной теме.
Опишу свое решение с комментариями.
Первое на, что я обратил внимание, так это на то что робот обходит мои ловушки и я понял, что он обращается на прямую в базу данных и туда заливает свою информацию. Т.е. бот получает из базы данных список полей Формы, заполняет их, и отправляет назад.
Вторым моим рассуждением стал анализ задач бота, главная задача бота, это публикация ГОВНО-ссылки на свой ресурс. Далее я подумал ЛЮБАЯ ссылка имеет вид: имя сайта, имя сайта и т.д.
Подсказку я нашел в интернете в темах про регулярные выражения.
Итак я вставил в файл /components/forms/frontend.php следующее выражение (у меня это строки 107-110)
} else { [code=php]$mail_message .= '<h3>'.$field['title'] . ':</h3>' . $fields[$field['id']];[/code] } // НАЧАЛО мой код запрещающий ЛЮБЫЕ ссылки cmsCore::addSessionMessage($_LANG['FORM_HTTP01'], 'error'); $inCore->redirectBack(); } // КОНЕЦ мой код запрещающий ЛЮБЫЕ ссылки
$mail_message .= '<h3>'.$field['title'] . ':</h3>' . $fields[$field['id']];
Не все кто использует наш любимый Инстант есть программистами, и я в том числе не программист.
Поэтому мои комментарии по коду:
if — логическое условие если
preg_match — поиск совпадений;
"/ — это начало перечисления символов;
/" — конец перечисления;
| — через прямые разделители перечисляем те символы, которые хотим запретить (я запретил: , , ftp:, www, .com, .net, .ru).
Обратной слешью экранируем те символы, которые используются в качестве служебных при построении регулярных выражений, в частности прямые слеши. (ПРИМЕР выражение , два косых слеша экранируем обратным слешом и получаем вместо них \/ \/).
$fields[$field['id']] — переменная которую я проверяю
Ну вот пожалуй и все. Тему пока прошу не закрывать, т.к. я хочу внедрить данный метод в форум. Решение опишу здесь же.
Всем удачи!!!