Спам через formit

Всем привет, не как не могу разгадать загадку, не понимаю как через форму связи приходит спам.
Стоит хук math
Вчера еще добавил поле для ввода mail с валидацией.
В итоге это все не помогает и приходит по 5 писем.
Приходит такая дрянь screenshot.su/show.php?img=b45d655023c0ae58c2f0a1883c48f64c.jpg

Код формы
<form>
<div class="form-group">
    <label class="sr-only" for="af_name"></label>
    <div class="input-group">
      <div class="input-group-addon"><i class="fa fa-user"></i></div>
      <input type="text" class="form-control" id="af_name" name="name" value="[[+fi.name]]" placeholder="Как вас зовут?">
    </div>
	  <span class="error_name">[[+fi.error.name]]</span>
  </div>
  <div class="form-group">
    <label class="sr-only" for="af_phone"></label>
    <div class="input-group">
      <div class="input-group-addon"><i class="fa fa-phone"></i></div>
      <input type="text" class="form-control" id="af_phone" name="phone" value="[[+fi.phone]]" placeholder="Номер телефона">
    </div>
	<span class="error_phone">[[+fi.error.phone]]</span>
  </div>
  
    <div class="form-group">
    <label class="sr-only" for="af_mail"></label>
    <div class="input-group">
      <div class="input-group-addon"><i class="fa fa-envelope" aria-hidden="true"></i></div>
      <input type="text" class="form-control" id="af_mail" name="mail" value="[[+fi.mail]]" placeholder="Контактный Email">
    </div>
	<span class="error_mail">[[+fi.error.mail]]</span>
  </div>
  
  <div class="form-group">
    <label class="sr-only" for="af_content"></label>
    <div class="input-group">
      <div class="input-group-addon"><i class="fa fa-font"></i></div>
          <textarea class="form-control" id="af_content" name="content" value="[[+fi.content]]" rows="3" placeholder="Сообщение"></textarea>
    </div>
    <span class="error_content">[[+fi.error.content]]</span>
  </div>
  
  <div class="modal-footer-button">
        <button type="submit" class="btn btn-success">Отправить</button>
  </div>
  	[[+fi.success:is=`1`:then=`
		<div class="alert alert-success">[[+fi.successMessage]]</div>
	`]]
	[[+fi.validation_error:is=`1`:then=`
		<div class="alert alert-danger">[[+fi.validation_error_message]]</div>
	`]]
</form>
[[!AjaxForm?
	&snippet=`FormIt`
	&form=`mail_form_call`
	&emailTpl=`email_tpl`
	&hooks=`email`
	&emailSubject=`Письмо с сайта [[++site_url]]`
	&emailTo=`info@xxxxxx.ru`
	&validate=`name:required,phone:required,content:required,mail:email:required`
	&validationErrorMessage=`В форме содержатся ошибки!`
	&successMessage=`Сообщение успешно отправлено`
]]
Сергей
12 мая 2016, 08:50
modx.pro
6
7 672
0

Комментарии: 26

Сергей
14 мая 2016, 18:49
0
При валидации почты, так-же приходит спам, только уже с почтой. Не ужели никто не сталкивался и не решал такую проблему?
    Алексей
    14 мая 2016, 18:54
    0
    А ты попробуй создать поле «user» сделать его невидимым с помощью css, затем проверять — если оно заполнено, то не принимать письмо. В разы будет меньше спама.
      Сергей
      14 мая 2016, 19:04
      0
      Уже так и думал сделать, но тут меня удивляет то, что приходят сразу писем по 7, т.е. и хук math не спасает(
        Sergey Pozhidaev
        15 мая 2016, 11:47
        +1
        Прикол в том что hidden поля роботы не заполняют, соответственно такой трюк не пройдет. Я делал по-другому. Поля оставлял видимым, но с посредством стилей сдвигал его за пределы блока, чтобы обычному пользователю его видно не было и он его не заполнял, а робот заполняет это поле — и не проходит валидацию.
          Алексей
          15 мая 2016, 17:50
          0
          да я так и вроде написал
          невидимым с помощью css
          можно использовать text-indent, visibility:hidden, display:none, и т.д.
            Сергей
            15 мая 2016, 17:56
            0
            Спасибо всем за советы, я сейчас сделал так, поле которые было и заполнялось спам роботом оставил и скрыл в css. Создал новое поле для текста. Для того поля добавил content:blank. Все верно?
              Алексей
              15 мая 2016, 20:36
              0
              если помогло, спама нет, и можно отправлять сообщения — то все верно -)
              можно наделать таких «виртуальных» полей (скрытых через css) несколько, к примеру:
              user, city, country — и заполнять их на автомате перед отправкой формы через javascript. Затем проверять на совпадение на серверной части. У ботов почти всегда отключен javascript — слишком для них это затратно (по ресурсам — на каждый сайт включать java-машину). Также, если у тебя сайт не супер-популярный, никто не будет заморачиватся писать бота специально для обхода таких нехитрых анти-спам мер.
              Я считаю, каптча — это очень крайний способ защиты от спама, когда на простые методы защиты, спамеры тут же адаптируют своих ботов. Но вот в моей практике такого не случалось.
                Сергей
                15 мая 2016, 20:43
                0
                Фактически хук math, это что то вроде капчи, возможно это и есть оно. Но почему не помогает, не понятно.
                  Алексей
                  16 мая 2016, 17:29
                  0
                  вроде как спамеры давным давно научились считать текстовые капчи. Тут нужно проявить фантазию, и к примеру задавать такие формулы: 5 + x = 7, а на месте X — ставить input с возможностью ввода ответа. На все это заморачиваться не стоит — если простое скрытие «ловушечных» input'ов через css работает.
              Sergey Pozhidaev
              16 мая 2016, 10:30
              0
              Ну не совсем, роботы считывают стили и если стоит
              visibility:hidden, display:none, и т.д.
              то не заполняют их, и трюк не проходит.
                Сергей
                16 мая 2016, 10:37
                0
                На данный момент, полет нормальный, нет спама, подожду еще 1-2 недели и оставлю свой вердикт, может кому будет полезна наша дискуссия.
                Но пока вариант такой:
                1) Валидация по email — не спасает
                2) хук spam — не спасает
                3) хук math — не спасает (и вообще странно, мне кажется его как то обходят и не заполняют, не думаю что в ручную вбивают)
                Единственное, что помогло — скрытое поле стилями.
                И вопрос, может кто знает как сделать ограничение в отправке формы по времени, например 1 письмо в 20 сек.
                  Алексей
                  16 мая 2016, 13:51
                  0
                  окей, тогда вот такой рецептик modx.pro/help/7830/#comment-54990
                  хотя я не видел таких ботов, которые занимаются распарсиванием стилей. Тут 1- нужно чтобы бот был «всеядный» — мог отправлять формы любых типов, с любым количеством input'ов 2- мог анализировать какие поля и где заполнять, т.е. парсить стили. Что-то я не встречал такого. Только если вручную кто-то адаптирует какой-нибудь allsubmitter или xrumer под ваш сайт. Но сайт должен для спамера представлять особый интерес в таком случае. Вот тут уже в дело должна пойти каптча.
            Andrei D.
            14 мая 2016, 21:50
            1
            +2
            До недавнего времени мне помогало такое решение, но сейчас роботы поумнели
            &hooks=`spam,email`
            &validate=`additionalemail:blank`

            <input type="hidden" name="additionalemail" value="" />
            <input type="hidden" name="nospam:blank" value="" />

            Пришлось добавить кнопку «Я не робот», которая в div подгружает кнопку отправить.
            Причем, эта кнопка находится вне тегов {form} {/form}
            <script>
            $(document).ready(function() {
            $(".norobot").click(function() {
            $(".norobotarea").html('<button type="submit" class="button transition-03 smooth">Отправить</button>');
            });
            });
            </script>

            Капчу совсем не хотелось ставить
              Сергей
              15 мая 2016, 14:56
              0
              Сейчас попробую за счет скрытого поля решить, если не поможет, буду пробовать ваш вариант, спасибо.
              t3mnikov
              15 мая 2016, 09:57
              0
              math помогает от спама! но у FormIt 2.2.8 странная особенность хук math должен стоять первым:

              [[!FormIt?
                  &hooks=`math,email,spam,FormItAutoResponder,FormItSaveForm,redirect`
                  &emailTpl=`tpl.FeedBackMe`
                  &emailSubject=`Новое сообщение с формы обратной связи`
                  &emailTo=`mail@mail.mail`
                  &emailFromName=`[[++site_name]]`
                  &emailFrom=`noreply@mail.ru`
                  
                  &validate=`workemail:blank,math:required`
                  
                  &fiarTpl=`tpl.FeedBackClient`
                  &fiarSubject=`Новое сообщение с формы обратной связи`
                  &fiarToField=`email`
                  &fiarFromName=`[[++site_name]]`
                  &fiarFrom=`noreply@mail.ru`
                  &fiarReplyTo=`noreply@mail.ru`
                  
                  &redirectTo=`28`
              ]]
              Далее в форме плейсхолдеры:

              <tr>
                              <td>Код безопасности <font color="red">*</font> [[!+fi.op1]] [[!+fi.operator]] [[!+fi.op2]]:</td>
                              <td>
                                  <input type="text" name="math:required" size="6" maxlength="5" style="text-align:center;" value="[[!+fi.math]]">
                                  [[!+fi.error.math]]
                                  <input type="hidden" name="op1" value="[[!+fi.op1]]" />
                                  <input type="hidden" name="op2" value="[[!+fi.op2]]" />
                                  <input type="hidden" name="operator" value="[[!+fi.operator]]" />
                              </td>
                          </tr>
                          <tr><td colspan="2" align="center">
              <input type="submit" value="Отправить сообщение"></td></tr>
                Сергей
                15 мая 2016, 14:54
                0
                Спасибо за ответ, но посмотрел ваш вариант и мой, у меня сейчас фактически так-же все и не помогает:
                <form>
                <div class="form-group">
                    <label class="sr-only" for="af_name"></label>
                    <div class="input-group">
                      <div class="input-group-addon"><i class="fa fa-user"></i></div>
                      <input type="text" class="form-control" id="af_name" name="name" value="[[+fi.name]]" placeholder="Как вас зовут?">
                    </div>
                	  <span class="error_name">[[+fi.error.name]]</span>
                  </div>
                  <div class="form-group">
                    <label class="sr-only" for="af_phone"></label>
                    <div class="input-group">
                      <div class="input-group-addon"><i class="fa fa-phone"></i></div>
                      <input type="text" class="form-control" id="af_phone" name="phone" value="[[+fi.phone]]" placeholder="Номер телефона">
                    </div>
                	<span class="error_phone">[[+fi.error.phone]]</span>
                  </div>
                  
                    <div class="form-group">
                    <label class="sr-only" for="af_mail"></label>
                    <div class="input-group">
                      <div class="input-group-addon"><i class="fa fa-envelope" aria-hidden="true"></i></div>
                      <input type="text" class="form-control" id="af_mail" name="mail" value="[[+fi.mail]]" placeholder="Контактный Email">
                    </div>
                	<span class="error_mail">[[+fi.error.mail]]</span>
                  </div>
                  
                  <div class="form-group">
                    <label class="sr-only" for="af_content"></label>
                    <div class="input-group">
                      <div class="input-group-addon"><i class="fa fa-font"></i></div>
                          <textarea class="form-control" id="af_content" name="content" value="[[+fi.content]]" rows="3" placeholder="Сообщение"></textarea>
                    </div>
                    <span class="error_content">[[+fi.error.content]]</span>
                  </div>
                  <div class="form-group">
                    <label class="sr-only" for="af_math"></label>
                    <div class="input-group">
                      <div class="input-group-addon"><i class="fa fa-exclamation-triangle" aria-hidden="true"></i></div>
                      <!--label>[[!+fi.op1]] [[!+fi.operator]] [[!+fi.op2]]</label-->
                <input class="form-control" type="text" name="math" value="[[!+fi.math]]" placeholder="Сколько будет? [[!+fi.op1]] [[!+fi.operator]] [[!+fi.op2]] = *" />
                <input type="hidden" name="op1" value="[[!+fi.op1]]" />
                <input type="hidden" name="op2" value="[[!+fi.op2]]" />
                <input type="hidden" name="operator" value="[[!+fi.operator]]" />
                          <!--textarea class="form-control" id="af_content" name="content" value="[[+fi.content]]" rows="3" placeholder="Сообщение"></textarea-->
                    </div>
                    <span class="error_math">[[+fi.error.content]]</span>
                  </div>
                  
                  <div class="modal-footer-button">
                        <button type="submit" class="btn btn-success">Отправить</button>
                  </div>
                  	[[+fi.success:is=`1`:then=`
                		<div class="alert alert-success">[[+fi.successMessage]]</div>
                	`]]
                	[[+fi.validation_error:is=`1`:then=`
                		<div class="alert alert-danger">[[+fi.validation_error_message]]</div>
                	`]]
                </form>
                И
                [[!AjaxForm?
                	&snippet=`FormIt`
                	&form=`mail_form_call`
                	&emailTpl=`email_tpl`
                	&hooks=`math,spam,email`
                	&emailSubject=`Письмо с сайта [[++site_url]]`
                	&emailTo=`info@site.ru`
                	&validate=`math:required,name:required,phone:required,content:required,mail:email:required`
                	&validationErrorMessage=`В форме содержатся ошибки!`
                	&successMessage=`Сообщение успешно отправлено`
                	&mathMinRange=`1`
                    &mathMaxRange=`10`
                ]]
                Может где то ошибка, но спама сыпется очень много.
                Сергей
                26 мая 2016, 17:04
                +1
                Подвожу итог, самый надежный способ, который помог мне, это сделать новое поле для ввода текстовой информации и скрытие старого с помощью css. Соответственно добавил на старое поле условие, что не должно быть заполнено. Всем спасибо за помощь!
                  Владимир
                  26 мая 2016, 17:23
                  0
                  Вроде reCAPTCHA modx.pro/components/4902-new-google-recaptchav2-for-formit/ тоже сейчас достойный ответ спаму.
                  Ставил в очередной раз вчера. Хлопот ноль. Только получить коды тут
                    Сергей
                    26 мая 2016, 17:26
                    0
                    Возможно это хорошее решение, но когда вы сделаете формы для 50-10 сайтов, достаточно сложно ее ставить, если я не ошибаюсь там надо ключи получать как и на google капчу.
                      Владимир
                      26 мая 2016, 18:22
                      0
                      достаточно сложно ее ставить
                      — нет. Получение ключа и установка даже проще вашего решения. Я не приукрашиваю.
                      1. перешли поссылке
                      2. просто вписали домен и получили ключи
                      3. вписали ключи в настройки
                      4. добавили в форму два тега.
                        Здоров Александр
                        26 мая 2016, 21:58
                        0
                        у меня есть все один минус, который пока не исправил, может подскажите: есть форма на странице, ну например, услуги и форма в модальном окне обратного звонка или быстрой заявки
                        когда 2 формы на одной странице то капча загружается для одной из них, вроде которая выше друго по коду
                          Владимир
                          27 мая 2016, 12:11
                          0
                          Если не «трогать» сам reCAPTCHA, то 1. создайте отдельную страницу с пустым шаблоном, 2. вызовите на ней форму, потом 3. в модальном окне на нужной странице врежьте iframe с формой (страницей с пустым шаблоном).
                  t3mnikov
                  15 июня 2016, 07:01
                  0
                  Недавно сам столкнулся со спамом через FormIt, сразу вспомнил этот тикет! )
                  Я создал скрытое поле со значением текущего timestamp, потом в прехуке проверял с текущим timestamp'ом при сабмите формы, если разница меньше чем 5 секунд, то посылал бота к чертям. Время можно увеличить и до 20 секунд вполне. Засеките сами время, за которое вы заполните все поля. Не думаю, что спам боты сидят на сайте долгое время, только если не написаны на PhantomJS.
                  Я вот так избавился!
                    TITAN-UZ
                    07 апреля 2018, 17:33
                    +1
                    Код в студию!
                    Владимир Кисилица
                    15 июня 2016, 09:46
                    0
                    Я обычно делаю пустое поле text с распространенным именем, скрытое стилями. И проверяю пустое оно или нет. Боты его заполняют, так как для них это обычное поле, а пользователи не видят, поэтому незаполняют, если оно прилетело пустое, то заполнил его пользователь, если не пустое, то бот.
                      Stan Ezersky
                      09 апреля 2018, 10:42
                      0
                      Да не боты заполняют формы, а люди. Какую защите не ставь, спам валится с сайтов
                      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                      26