Регистрация ботов с пустыми полями

InstantCMS 1.X

как победить?

#1 27 января 2017 в 17:11
Постоянно регистрируются боты. Как понимаю, используют POST запросы, тк обязательные поля добавленные в форму регистрации не заполнены.
Как понимаю — надо править компонент registration на проверку заполненности дополнительных полей.
Если кто делал подобное — киньте пример. Тут на форуме искал, не нашел.
#2 27 января 2017 в 18:12
Пример из registration/fronted.php
  1. // Проверяем email
  2. if(!$item['email']) { cmsCore::addSessionMessage($_LANG['ERR_EMAIL'], 'error'); $errors = true; }
#3 27 января 2017 в 18:45
Как-то они интересно регистрируются, эти безымянные создания.
В ленте активности то и дело "{no_image} регистрируется".
Залезаю в админку — безымянных юзеров нет. Смотрю базу — безымянных нет. Смотрю action_log — нет записей о регистрации! shock
Нумерация пользователей в cms_users не сбита! То есть никто не регистрировался, автоинкремент не срабатывал.
Мистика! Летучие голландцы атакуют.
#4 27 января 2017 в 21:29
Вопрос в том, что данные задаются в дополнительной форме.
  1.  
  2. // получаем данные конструктора форм
  3. $item['formsdata'] = '';
  4. if(isset($users_model->config['privforms'])){
  5. if (is_array($users_model->config['privforms'])){
  6. foreach($users_model->config['privforms'] as $form_id){
  7. $form_input = cmsForm::getFieldsInputValues($form_id);
  8. $item['formsdata'] .= $inDB->escape_string(cmsCore::arrayToYaml($form_input['values']));
  9. // Проверяем значения формы
  10. foreach ($form_input['errors'] as $field_error) {
  11. if($field_error){ cmsCore::addSessionMessage($field_error, 'error'); $errors = true; }
  12. }
  13. }
  14. }
  15. }
  16.  
  17.  
А вот здесь я уже теряюсь — как найти нужную переменную передаваемую от формы и проверить на значение именно ее.
#5 27 января 2017 в 21:35
В браузере исходный код формы посмотрите там name= каждого пункта
#7 27 января 2017 в 23:22


konst, Это посмотрите,

Rainbow

Огромный сенкс!!! Сделал по вашему примеру, но вместо "Пол" использовать вопрос по направленности сайта.
Посмотрим утром, что скажут боты… 😊
#8 28 января 2017 в 00:42
Забавно, но просто проверку на заполненность дополнительного поля "пробили" через 40 минут :-/
Похоже кто то меня не любит 😊
#9 28 января 2017 в 08:28

Похоже кто то меня не любит

konst
Тоже ботов стало куча, при том даже на тестовых сайтах где посещалка была 10 уников в неделю, там теперь до 50 в день и всё боты, постят всякю лабуду в блоги, комменты, объявления.
Версии 1.10.6, 1.10.7
#10 28 января 2017 в 10:04

Похоже кто то меня не любит

konst

Попробуйте как писал раньше....

Одно поле сделайте выпадающем, НО: Первый пункт 0 а два пусть выбирают.

Отправил в личку пример.
#11 29 января 2017 в 13:15
Я сделал так, что работает только 1 ответ из 4 в выпадающем списке 😊 Для человека — выбор не представляет проблем.
Ботов поуменьшилось, но все равно пробиваются.
Видать "забивают" данные рандомно.
#12 14 февраля 2017 в 13:36
Продолжаю бороться с ботами, поле дополнительно прицепленное, как показал Rainbow боты пробивают, а вот поля заполненные через "данные конструктора форм" — не заполняют.

Пытаюсь проверить их, но не получается.

В cms поля получаются так:
  1.  
  2. // получаем данные конструктора форм
  3. $item['formsdata'] = '';
  4. if(isset($users_model->config['privforms'])){
  5. if (is_array($users_model->config['privforms'])){
  6. foreach($users_model->config['privforms'] as $form_id){
  7. $form_input = cmsForm::getFieldsInputValues($form_id);
  8. $item['formsdata'] .= $inDB->escape_string(cmsCore::arrayToYaml($form_input['values']));
  9.  
  10. // Проверяем значения формы
  11. foreach ($form_input['errors'] as $field_error) {
  12. if($field_error){ cmsCore::addSessionMessage($field_error, 'error'); $errors = true; }
  13. }
  14. }
  15. }
  16. }
  17.  
  18.  
Попытка проверить через
  1.  
  2. $rcmodel = $inCore->request('field[25]', 'str','');
  3. if($rcmodel!='7'){
  4. cmsCore::addSessionMessage('Ошибка', 'error'); $errors = true;}
  5.  
успеха не имеет.

Вопрос: как получить значение поля из "данных конструктора форм", если я знаю его имя (name="field[24]")?
#13 14 февраля 2017 в 14:02

Я сделал так, что работает только 1 ответ из 4 в выпадающем списке Для человека — выбор не представляет проблем.
Ботов поуменьшилось, но все равно пробиваются.
Видать "забивают" данные рандомно.

konst

можно в лс что именно сделали?
#14 14 февраля 2017 в 15:14


можно в лс что именно сделали?

@skynet

Тоже что и тут: instantcms.ru/blogs/moi-put/hak-plagin-vybora-avtara-pri-registraci-vybor-goroda.html
только надо выбрать из 4 один ответ, который является правильным к тематике сайта.

Вопрос: как получить значение поля из "данных конструктора форм", если я знаю его имя (name="field[24]") все еще остается актуальным.
#15 15 февраля 2017 в 17:50
Так и не смог понять, как получить значение определенного поля.
Сделал через проверку наличия подстроки в $item['formsdata']
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.