Спам через AjaxForm

Одолел спам на этой неделе, в логах «POST /assets/components/ajaxform/action.php HTTP/1.0».
Формы с шаблонов убрал сoвсем, но спам продолжает идти со старыми параметрами/input, которые также были заменены.
Похоже на взлом AjaxForm, единственное упоминание о данной проблеме нашел на community.modx.com. Сталкивался кто-нибудь? Или пришло время переписывать все сайты на FetchIt?
Сергей
20 марта 2024, 17:50
modx.pro
2
864
0

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

Павел Романов
20 марта 2024, 20:08
1
+2
Они шлют прямыми запросами на assets/components/ajaxform/action.php.
Сделайте сниппет chkbot:
<?php
$_SESSION['afchk'] = 1;
return true;

Добавьте его в &preHooks:
[[!AjaxForm?
&preHooks=`chkbot`
&hooks=`spam,email`
...
]]

А в файле assets/components/ajaxform/action.php на 23 строке добавьте:
if($_SESSION['afchk'] != 1){
    echo  $AjaxForm->success('Сообщение успешно отправлено.');
    die();
}
unset($_SESSION['afchk']);
    Сергей
    21 марта 2024, 11:56
    0
    Благодарю, добавил проверку сессии, только сразу
    die('Сообщение успешно отправлено.');
    до этого ставил редирект на главную (спам проскакивал пару раз). Сейчас уже 3 часа полет нормальный.

    Насколько я понял (php со словарем:)) там изначально проверка только на то что есть запрос ajax или нет, который получается можно подделать?

    Прямые запросы на assets/components/ajaxform/action.php в логах остались, количество сократилось.

    Имена и телефоны подставляют реальные из слитых баз, клиент сначала звонил по ним, некоторые отвечали что им звонят уже не первый раз из разных контор.
      Арман
      25 марта 2024, 18:43
      0
      Сегодня началась новая спам атака на сайт. Накидали за день номеров 200 на почту через assets/components/FetchIt/action.php. Этот код помог (стоит FetchIt). Единственное что не пойму почему не сработал файл .htaccess который я вставил в assets/components/FetchIt и прописал там
      RewriteEngine On
      RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?vision-hotel.ru [NC]
      RewriteRule \.* - [F]
      Похоже что заголовок Referer тоже подделывали при спаме.

      SendIt пока что не хочется ставить. В общем и целом нравится FetchIt так же там готовая интеграция с AmoCRM которую легко и быстро настроил через FetchIt sucsess.

      Надеюсь автор допилит этот момент из коробки. А так всем спасибо)
        Арман
        27 марта 2024, 20:02
        0
        Ну в общем я поторопился с выводами. Это помогла от спама который напрямую отсылал через action. Но не помог от этих сообщения который до этого были.
        config_prefer_imagemagick: 0
        src: http
        f: php
        action: web/phpthumb
        useRawIMoutput: 1
        IMresizedData:
        phoneform:
        Похоже он отправляет не напрямую и создается сессия поэтому этот код в данном случаи не помог. При этом игнорирует hook spam а также required на поле phoneform. Похоже на некорректную работу плагина на сайте я хз…

        Логи совпадающие со временем отправки
        109.248.15.180 - - [27/Mar/2024:10:07:17 +0300] "POST /assets/components/fetchit/action.php HTTP/1.0" 200 320 "https://site.ru/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0"
        2a12:5940:12c5::2 - - [27/Mar/2024:10:07:23 +0300] "GET / HTTP/1.1" 301 173 "-" "Mozilla/5.0 (X11; Linux i686; rv:51.0) Gecko/20100101 Firefox/51.0"
        2a12:5940:12c5::2 - - [27/Mar/2024:10:07:23 +0300] "GET / HTTP/1.0" 200 19134 "-" "Mozilla/5.0 (X11; Linux i686; rv:51.0) Gecko/20100101 Firefox/51.0"
        2a12:5940:12c5::2 - - [27/Mar/2024:10:07:33 +0300] "POST /connectors/system/phpthumb.php HTTP/1.0" 200 158 "https://site.ru:443/" "Mozilla/5.0 (X11; Linux i686; rv:51.0) Gecko/20100101 Firefox/51.0"
        2a12:5940:12c5::2 - - [27/Mar/2024:10:07:33 +0300] "POST /assets/components/gallery/connector.php HTTP/1.0" 404 19134 "https://site.ru:443/connectors/system/phpthumb.php" "Mozilla/5.0 (X11; Linux i686; rv:51.0) Gecko/20100101 Firefox/51.0"
        2a12:5940:12c5::2 - - [27/Mar/2024:10:07:34 +0300] "GET /assets/components/gallery/cache/http.836565742893abde7371fbf19ddc8253.php HTTP/1.0" 404 19134 "https://site.ru:443/assets/components/gallery/connector.php" "Mozilla/5.0 (X11; Linux i686; rv:51.0) Gecko/20100101 Firefox/51.0"
        2a12:5940:12c5::2 - - [27/Mar/2024:10:07:41 +0300] "GET /assets/images/accesson.php HTTP/1.0" 404 19134 "https://site.ru:443/assets/components/gallery/cache/http.836565742893abde7371fbf19ddc8253.php" "Mozilla/5.0 (X11; Linux i686; rv:51.0) Gecko/20100101 Firefox/51.0"

        Это то что внутри &form=`callbackform`
        <form action="[[~[[*id]]]]" method="post" class="p-4 p-md-5 border rounded-3 bg-primary bg-gradient">
                  <input type="hidden" name="nospam" value="">
                  <div class="form-floating mb-3">
                    <input name="phoneform" type="tel" class="form-control" id="phoneform" placeholder="+7 (XXX) XXX-XX-XX" pattern="(\+7|8)\s?[\(]?(\d{3})[\)]?\s?[\-]?(\d{3})[\-]?(\d{2})[\-]?(\d{2})" required>
                    <label for="phoneform">Телефон</label>
                    <div class="invalid-feedback" data-error="phoneform">[[+fi.error.phoneform]]</div>
                  </div>
                  <button class="w-100 btn btn-lg btn-light bg-gradient" type="submit">Жду звонка</button>
                  <hr class="text-white my-4">
                  <small class="text-white text-center">Свяжемся с вами в течении 1 минуты</small>
        </form>

        Вызов
        [[!FetchIt?
          &form=`callbackform`
          &preHooks=`chkbot`
          &hooks=`spam, email`
          &emailSubject=`Обратный звонок`
          &emailTo=`marketing@site.ru`
          &validate=`nospam:blank, phoneform: required`
          &validationErrorMessage=`В форме содержатся ошибки!`
          &successMessage=`Сообщение успешно отправлено!`
        ]]
          newbmod
          15 июля 2024, 13:16
          0
          Спасибо за решение! Использовал. Три дня — тишина!
          А не подскажите относительно движка Evolution. Мне кажется там такая же история с прямой отправкой через FormLister происходит?
          al1ve
          06 ноября 2024, 16:28
          0
          Здравствуйте. Такой вопрос. Из-за спама пришлось перейти на плагин SendIt, но спам всё равно приходит. Ваш способ сработает для SendIt? Или его нужно переписать? Или может я просто неправильно настроил SendIt?
          Артур Шевченко
          20 марта 2024, 20:42
          0
          По словам автора FetchIt использует тот же бэк, что AjaxForm, поэтому вряд ли переход на него спасёт от спама. А вот SendIt может помочь.
            Сергей
            21 марта 2024, 12:13
            0
            В соседней теме как раз из той же области походу.

            Буду пробовать SendIt, на новых точно уже без AjaxForm.
            Сергей
            20 марта 2024, 20:54
            0
            Пока не могу проверить ни то, ни другое. Доберусь только завтра. Сайт вообще отключён уже, а спам идёт дальше!
              Fullstack
              08 июля 2024, 21:28
              0
              У нас (и не только) такая же проблема. Куча запросов напрямую к `/assets/components/ajaxform/action.php` каждую минуту!

              Это потому что прямые вызовы этого скрипта обходят любые валидации и хуки FormIt

              … потому что они прописываются лишь в вызовах сниппета, а в action.php отсутствуют. Поэтому когда отправляются нормальные запросы с реальной страницы, всё хорошо, потому что код возвращаемый сниппетом содержит все валидаторы и хуки, которые надо выполнять. А через прямой юз action.php эта логика (валидаторы и хуки) недоступны, поэтому все запросы будут отправлены на сервер без security checks.

              AjaxForm просто обязаны сделать фикс этой проблемы даже вопреки нежеланию (как log4j обязан был выпустить обновление своей уязвимости), или принять чей-нибудь фиксящий pull request. Это серьезнейшая дыра в безопасности и очень серьёзная, которую они своей глупостью оставили халатно — там итак было понятно, что валидаторы с хуками будут обходиться, а они понадеялись на авось…
                Николай Савин
                08 июля 2024, 21:50
                0
                ajaxForm по идее устарел и отправлен в архив. Использовать его не рекомендуется в принципе.
                  Fullstack
                  08 июля 2024, 23:14
                  0
                  Да, но многие не знают об этой проблеме и самом наличии альтернативных компонентов.

                  Но при этом всегда обновляют компоненты у себя в /manager, когда там подсвечивается наличие обновлений (оранжевым).

                  И я один из них. А таких миллионы. И сайтов таких десятки или сотни тысяч.
                  Так что обновление необходимо. Чисто патч безопасности
                Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                13