Как защитить Formit от Curl
Всем доброго времени суток.
На новый год начали атаковать сайт спамом, опытным путем выяснили, что атака идет примерно таким скриптом:
curl -X POST -F 'name=linuxize22' -F 'phone=%2B7+(111)+111-1111' -F 'af_action=b410d612437cea16aebde937ffa79a3b' -F 'pageId=1' \
-H «X-Requested-With: XMLHttpRequest» \
--cookie «PHPSESSID=e12556e3b7093e9f82411af39f471e9f» \
адрес.сайта/assets/components/ajaxform/action.php
Капча не спасает от такой атаки (или может я коряво ее настроил?), но в личном кабинете капчи никаких плохих сессий она на замечает. А я вот спокойно таким скриптом шлю письма, когда она работает, таким же образом (как мне кажется) шлет письма и недоброжелатель.
Есть ли возможность защититься от такой атаки и интегрировать капчу на уровне самого formit, а не на уровне отдельной формы? Или может .htaccess спасет? Спам прекращается только когда ломаю formit добавляя в начале скрипта return;
На новый год начали атаковать сайт спамом, опытным путем выяснили, что атака идет примерно таким скриптом:
curl -X POST -F 'name=linuxize22' -F 'phone=%2B7+(111)+111-1111' -F 'af_action=b410d612437cea16aebde937ffa79a3b' -F 'pageId=1' \
-H «X-Requested-With: XMLHttpRequest» \
--cookie «PHPSESSID=e12556e3b7093e9f82411af39f471e9f» \
адрес.сайта/assets/components/ajaxform/action.php
Капча не спасает от такой атаки (или может я коряво ее настроил?), но в личном кабинете капчи никаких плохих сессий она на замечает. А я вот спокойно таким скриптом шлю письма, когда она работает, таким же образом (как мне кажется) шлет письма и недоброжелатель.
Есть ли возможность защититься от такой атаки и интегрировать капчу на уровне самого formit, а не на уровне отдельной формы? Или может .htaccess спасет? Спам прекращается только когда ломаю formit добавляя в начале скрипта return;
Комментарии: 17
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
&snippet=`FormIt`
&form=`tplCallbackForm`
&emailTpl=`tplCallbackMessage`
&hooks=`spam,email,recaptchav3`
&emailSubject=`Заказ обратного звонка с сайта [[++site_url]]`
&emailTo=`[[++ms2_email_manager]]`
&validate=`name:required,phone:required,email:blank`
&validationErrorMessage=`В форме содержатся ошибки!`
&successMessage=`Сообщение успешно отправлено!`
]]
&hooks=`spam,email,recaptchav3`
у вас значит проверка spam (не знаю, что там), далее отправляется письмо, далее проверка рекапчи… только смысл то её проверять, письмо уже отправлено.
AjaxForm лишь прокидывает данные на FormIt.
Для того, чтобы это все работало — при рендере формы в сессию записываются $scriptPtoperties с которыми вызывался AjaxForm, эти данные записаны в сессии с ключем, который передается в af_action.
Получается, что в сессии эти данные есть по крайней мере она не пуста)
Потом FormIt вызывает хуки по очереди:
— spam он там как-то email проверяет, у тебя в форме я каких-либо email не вижу, думаю что в итоге этот хук вообще ничего не делает у тебя;
— далее правильно вызывать recaptchav3, судя по логам он с ошибкой работает. Если посмотрим в код, то сообщение в логе «Failed to load Recaptcha class» означает и то, что хук вернет false. Все, FormIt должен прекратить обработку, до хука email, который отправит письмо, дело не дойдет.
А на этой строке добавить проверку
И не забудь рассказать помогло или нет, интересно же)))
Как вариант конечно создать дубликат action.php, назвать аля fsdfjsfjsoidfjsofsdofsd.php, заменить везде обращения action.php на новый файл. в оригинальном action.php return можно какую то ошибку все время возвращать для правдоподобности.
Но если прям всерьез взялись за атаку, то и этот файл быстро найдут, посмотрят куда отправляются запросы.