19.06.2018     363

Когда-то я делал капчу для сниппета Formit в MODX: https://modx.com/extras/package/coolphpcaptcha. Долгое время сам её использовал, но с недавнего времени спамщики массово стали её обходить. Видимо эту капчу добавили в их **** (нецензурная брань)... их любимое ПО, название которого я не буду называть, чтобы не рекламировать. В капче есть настройки, которые позволяют её усложнить и спам прекращается, но это усложняет отправку почты и для нормальных пользователей. Теперь я стал использовать капчу на JavaScript и такая капча вполне может быть эффективной.

Код скрипта капчи здесь:
https://github.com/robiveli/js-captcha

Как это выглядит:

Данная капча использует Canvas для вывода цифр с примером, поэтому роботу прочитать это будет сложновато. Если будут проблемы, можно скачать с моего сервера, т.к. вроде я что-то там правил, чтобы она заработала.

Пример использования:

<form id="feedbackForm" action="/" method="post">
...
<input type="text" class="jCaptcha" placeholder="Пожалуйста, введите результат." autocomplete="off">
</form>

<script src="/assets/js/jCaptcha.js"></script>
<script>
// Спаммер, будь ты проклят! Чтоб к тебе тёща в гости на месяц приехала!
var form = document.getElementById('feedbackForm'), formAction = '/contacts.html#form';
var myCaptcha = new jCaptcha({
    canvasFillStyle: '#777',
    requiredValue: '=',
    callback: function(response, $captchaInputElement) { 
        if (response == 'success') {
            $captchaInputElement[0].placeholder = 'Ура! Вы не спамщик!';
            form.action = formAction;
            form.submit();
        }
        if (response == 'error') {
            $captchaInputElement[0].placeholder = 'Пожалуйста, попробуйте ещё раз.'; 
        }
    }
}); 

form.addEventListener('submit', function(e) { 
    e.preventDefault(); 
    myCaptcha.validate(); 
}, false);
</script>

Как видно из кода, изначально в атрибуте "action" формы введен не верный URL. Только после правильно введенного ответа форме будет дан верный "action" и она отправится. Можно много придумать дополнительных усложений. Например, верный URL для "action" можно спрятать получше. Всё ограничено только вашей фантазией.