Спам через AjaxForm
Одолел спам на этой неделе, в логах «POST /assets/components/ajaxform/action.php HTTP/1.0».
Формы с шаблонов убрал сoвсем, но спам продолжает идти со старыми параметрами/input, которые также были заменены.
Похоже на взлом AjaxForm, единственное упоминание о данной проблеме нашел на community.modx.com. Сталкивался кто-нибудь? Или пришло время переписывать все сайты на FetchIt?
Формы с шаблонов убрал сoвсем, но спам продолжает идти со старыми параметрами/input, которые также были заменены.
Похоже на взлом AjaxForm, единственное упоминание о данной проблеме нашел на community.modx.com. Сталкивался кто-нибудь? Или пришло время переписывать все сайты на FetchIt?
Комментарии: 13
Они шлют прямыми запросами на assets/components/ajaxform/action.php.
Сделайте сниппет chkbot:
Добавьте его в &preHooks:
А в файле assets/components/ajaxform/action.php на 23 строке добавьте:
Сделайте сниппет 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']);
Благодарю, добавил проверку сессии, только сразу
Насколько я понял (php со словарем:)) там изначально проверка только на то что есть запрос ajax или нет, который получается можно подделать?
Прямые запросы на assets/components/ajaxform/action.php в логах остались, количество сократилось.
Имена и телефоны подставляют реальные из слитых баз, клиент сначала звонил по ним, некоторые отвечали что им звонят уже не первый раз из разных контор.
die('Сообщение успешно отправлено.');
до этого ставил редирект на главную (спам проскакивал пару раз). Сейчас уже 3 часа полет нормальный.Насколько я понял (php со словарем:)) там изначально проверка только на то что есть запрос ajax или нет, который получается можно подделать?
Прямые запросы на assets/components/ajaxform/action.php в логах остались, количество сократилось.
Имена и телефоны подставляют реальные из слитых баз, клиент сначала звонил по ним, некоторые отвечали что им звонят уже не первый раз из разных контор.
Сегодня началась новая спам атака на сайт. Накидали за день номеров 200 на почту через assets/components/FetchIt/action.php. Этот код помог (стоит FetchIt). Единственное что не пойму почему не сработал файл .htaccess который я вставил в assets/components/FetchIt и прописал там
SendIt пока что не хочется ставить. В общем и целом нравится FetchIt так же там готовая интеграция с AmoCRM которую легко и быстро настроил через FetchIt sucsess.
Надеюсь автор допилит этот момент из коробки. А так всем спасибо)
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?vision-hotel.ru [NC]
RewriteRule \.* - [F]
Похоже что заголовок Referer тоже подделывали при спаме. SendIt пока что не хочется ставить. В общем и целом нравится FetchIt так же там готовая интеграция с AmoCRM которую легко и быстро настроил через FetchIt sucsess.
Надеюсь автор допилит этот момент из коробки. А так всем спасибо)
Ну в общем я поторопился с выводами. Это помогла от спама который напрямую отсылал через action. Но не помог от этих сообщения который до этого были.
Логи совпадающие со временем отправки
Это то что внутри &form=`callbackform`
Вызов
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=`Сообщение успешно отправлено!`
]]
Спасибо за решение! Использовал. Три дня — тишина!
А не подскажите относительно движка Evolution. Мне кажется там такая же история с прямой отправкой через FormLister происходит?
А не подскажите относительно движка Evolution. Мне кажется там такая же история с прямой отправкой через FormLister происходит?
Не за что )
По Evo, боюсь, не подскажу.
По Evo, боюсь, не подскажу.
Здравствуйте. Такой вопрос. Из-за спама пришлось перейти на плагин SendIt, но спам всё равно приходит. Ваш способ сработает для SendIt? Или его нужно переписать? Или может я просто неправильно настроил SendIt?
По словам автора FetchIt использует тот же бэк, что AjaxForm, поэтому вряд ли переход на него спасёт от спама. А вот SendIt может помочь.
В соседней теме как раз из той же области походу.
Буду пробовать SendIt, на новых точно уже без AjaxForm.
Буду пробовать SendIt, на новых точно уже без AjaxForm.
Пока не могу проверить ни то, ни другое. Доберусь только завтра. Сайт вообще отключён уже, а спам идёт дальше!
У нас (и не только) такая же проблема. Куча запросов напрямую к `/assets/components/ajaxform/action.php` каждую минуту!
Это потому что прямые вызовы этого скрипта обходят любые валидации и хуки FormIt
… потому что они прописываются лишь в вызовах сниппета, а в action.php отсутствуют. Поэтому когда отправляются нормальные запросы с реальной страницы, всё хорошо, потому что код возвращаемый сниппетом содержит все валидаторы и хуки, которые надо выполнять. А через прямой юз action.php эта логика (валидаторы и хуки) недоступны, поэтому все запросы будут отправлены на сервер без security checks.
AjaxForm просто обязаны сделать фикс этой проблемы даже вопреки нежеланию (как log4j обязан был выпустить обновление своей уязвимости), или принять чей-нибудь фиксящий pull request. Это серьезнейшая дыра в безопасности и очень серьёзная, которую они своей глупостью оставили халатно — там итак было понятно, что валидаторы с хуками будут обходиться, а они понадеялись на авось…
Это потому что прямые вызовы этого скрипта обходят любые валидации и хуки FormIt
… потому что они прописываются лишь в вызовах сниппета, а в action.php отсутствуют. Поэтому когда отправляются нормальные запросы с реальной страницы, всё хорошо, потому что код возвращаемый сниппетом содержит все валидаторы и хуки, которые надо выполнять. А через прямой юз action.php эта логика (валидаторы и хуки) недоступны, поэтому все запросы будут отправлены на сервер без security checks.
AjaxForm просто обязаны сделать фикс этой проблемы даже вопреки нежеланию (как log4j обязан был выпустить обновление своей уязвимости), или принять чей-нибудь фиксящий pull request. Это серьезнейшая дыра в безопасности и очень серьёзная, которую они своей глупостью оставили халатно — там итак было понятно, что валидаторы с хуками будут обходиться, а они понадеялись на авось…
ajaxForm по идее устарел и отправлен в архив. Использовать его не рекомендуется в принципе.
Да, но многие не знают об этой проблеме и самом наличии альтернативных компонентов.
Но при этом всегда обновляют компоненты у себя в /manager, когда там подсвечивается наличие обновлений (оранжевым).
И я один из них. А таких миллионы. И сайтов таких десятки или сотни тысяч.
Так что обновление необходимо. Чисто патч безопасности
Но при этом всегда обновляют компоненты у себя в /manager, когда там подсвечивается наличие обновлений (оранжевым).
И я один из них. А таких миллионы. И сайтов таких десятки или сотни тысяч.
Так что обновление необходимо. Чисто патч безопасности
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.