FormIt + AjaxForm = Спамеры пробивают защиту
Добрый день!
На сайте стоит FormIt и AjaxForm, для защиты от спама используется способ, предложенный Ильей Уткиным (вот этот способ).
Все работает, пока спамеры не начинают в скрытое поле вводить цифру «0».
Скажите, как поправить вот этот код, чтобы письмо считалось спамом при вводе любого символа или буквы в скрытое поле?
На сайте стоит FormIt и AjaxForm, для защиты от спама используется способ, предложенный Ильей Уткиным (вот этот способ).
Все работает, пока спамеры не начинают в скрытое поле вводить цифру «0».
Скажите, как поправить вот этот код, чтобы письмо считалось спамом при вводе любого символа или буквы в скрытое поле?
<?php
if ($_POST['input-message']) { // проверяем наше поле на пустоту
echo $AjaxForm->success('Ваше сообщение отправлено.');
die();
} else {
return true;
}
Комментарии: 6
Можно так
<?php
if ($_POST['input-message'] != '') { // проверяем наше поле на пустоту
echo $AjaxForm->success('Ваше сообщение отправлено.');
die();
} else {
return true;
}
я делаю такую проверку<?php
$isAjax = !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest';
if (!$isAjax) {
// Выставляем плейсхолдер ошибки
$hook->addError('name', 'Спам!');
return false;
}
$pageId = $hook->getValue('pageId');
if (empty($pageId)){
$hook->addError('name', 'Спам!');
return false;
}
return true;
Спасибо!
А можете про свой метод подробнее рассказать? А то первый способ мне не очень нравится, т.к. возникает куча проблем с автозаполнением форм в браузере и есть большой риск, что нормальные письма могут попасть в спам
А можете про свой метод подробнее рассказать? А то первый способ мне не очень нравится, т.к. возникает куча проблем с автозаполнением форм в браузере и есть большой риск, что нормальные письма могут попасть в спам
Проверка на ajax и на наличие pageId, который добавляется AjaxForm'ом при отправке
Я правильно понимаю что вы этот код
<?php
$isAjax = !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest';
if (!$isAjax) {
// Выставляем плейсхолдер ошибки
$hook->addError('name', 'Спам!');
return false;
}
$pageId = $hook->getValue('pageId');
if (empty($pageId)){
$hook->addError('name', 'Спам!');
return false;
}
return true;
вставляете в сниппет и вызываете этот сниппет перед хуком mail в formit?
Да, верно
А зачем нужен отдельный хук?
Там же можно в validate прописать field:blank
Это проверка, что поле должно быть не заполненным.
А насчет автозаполнения. Нужно прописать к скрытому полю autocomplete=«new-password»
Тогда поле не будет автозаполняться
Также пара советов.
Не стоит скрывать стилями само поле.
Лучше обернуть его в блок со стилями вроде width: 0;height: 0;overflow: hidden;
И стоит атрибут name у поля сделать вроде phone или tel, на случай если спамеры проверяют «полезность» поля.
Там же можно в validate прописать field:blank
Это проверка, что поле должно быть не заполненным.
А насчет автозаполнения. Нужно прописать к скрытому полю autocomplete=«new-password»
Тогда поле не будет автозаполняться
Также пара советов.
Не стоит скрывать стилями само поле.
Лучше обернуть его в блок со стилями вроде width: 0;height: 0;overflow: hidden;
И стоит атрибут name у поля сделать вроде phone или tel, на случай если спамеры проверяют «полезность» поля.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.