Contact form 7 защита от спама без капчи

Недавно понадобилось защитить сайт от спама в форму обратной связи от Contact Form 7 для WordPress. Простая математическая капча не спасала, а рекапчу ставить не хотелось (тем более ее уже тоже пробивают).

При защите от спама я исходил из того, что бот не исполняет javascript, хотя это не совсем так, есть например Zennoposter, однако мое решение в первую очередь от ковровых бомбардировок, а не от точечных ударов поэтому задача сводилась к тому, чтоб создать поле без которого Contact Form 7 не отправляло бы форму, и оперировать его значением с помощью JS при отправке реальных пользователях.

Самым лучшим мне показалось использовать чекбокс — или в простонародье галочку. Логика работы галочки необычная — форма отправляется только если галочка снята, при этом дефолтное состояние галочки — checked. То есть если заходит бот он

  • ничего сделает данному полю (если он его не знает)
  • сделает ее checked

т.е. в результате галочка будет checked и форма не отправится, и спам соответственно тоже.

Если же заходит браузер исполняющий JS, то галочка снимается через JS и форма отправляется.

Реализация:

1. Создаем в Contact Form 7 чекбокс

[acceptance agree class:agree default:on invert]

acceptance — собственно сам чекбокс
default:on — по умолчанию checked
class:agree — class=»agree»
invert — отправлять форму только если checked снят

2. Убираем чекбоксу видимость через CSS

.agree {display:none}

3. Снимаем галочку через JS

<script language="javascript">
jQuery('.agree').prop('checked', false);
</script>

или на нативном JS

<script language="javascript">
       var x = document.getElementsByClassName("agree");
       var i;
       for (i = 0; i < x.length; i++) {
            x[i].checked = false;
       }
</script>

Скрипт нужно поместить ниже чем чекбокс, и лучше всего обернуть его document.ready.

Это собственно и всё. Защитить Contact Form 7 от спама как видите — несложно, сложнее было придумать логику, а делов по реализации — на 15 минут.

16 thoughts on “Contact form 7 защита от спама без капчи”

  1. Здравствуйте!
    Прочитала вашу статью. Интересно вооплотить на своем сайте. Можно для «чайников» более подробно указать в какой файл плагина CF7 вставлять код и в какую часть именно. И как обернуть в документ?
    Заранее спасибо.
    Ответ можно и на почту если Вас не затруднит.

    1. Вставлять надо не в файл плагина, а в шаблон сайта.
      для тех кто плохо разбирается, то
      Админка сайта — Внешний вид — Редактор
      п.2. Таблица стилей (style.css)
      п.3. Основной шаблон (index.php), перед закрывающим тегом

  2. Спасибо! Но не совсем понятно, какие файлы нужно редактировать в действиях по пунктам 2 и 3.

  3. Блин вообще тема, реализовал по инструкции все работает. Не люблю капчу просто, надеюсь боты не пройдут.

  4. Куда это добавлять? — Снимаем галочку через JS

    В какой именно файл? В ВордПресс нет файла индекс, то есть им не пользуется. Напишите точнее. В какой файл php его вбивать?

    1. А смысл в скриншотах, если темы разные. Вбивать в JS темы желательно, если нет то в footer.php

  5. Что то не работает, последняя версия CF7, хром.
    скрипт корректно отрабатывает, снимает чекбокс, но на кнопку все равно не нажать, пока руками чек бокс не поставишь или снимешь заново

  6. Здравствуйте! Отличная идея, но разобраться никак не могу.
    Я правильно понял, что чекбокс необходимо поместить в тело каждой формы обратной связи в contact form 7? Или надо создать новую форму с чекбоксом?
    Не понимаю, куда нужно поместить скрип, если чекбокс должен быть в contact form7, скрип должен быть в index.php, при этом скрипт должен располагаться ниже чекбокса…Как это возможно, если они в разных местах?)

    1. Правильно понимаете — чекбокс нужно поместить в каждую форму, а скрипт добавьте в любой .js темы, или прямо в тело страницы

  7. Скрипт не срабатывает в мобильной версии. То есть галочка не снимается и соответственно кнопка «Отправить» не работает. Как заставить работать на мобильных устройствах?

Добавить комментарий

Ваш e-mail не будет опубликован.