Доработки форм обратной связи

Дневник разработчика

Стоило мне вчера добавить на свой бложик контакную форму, так сразу же меня стали посещать спам-письма. Скрытое поле не помогло, акисмет — тоже бесполезен оказался для форм.

Пришлось гуглить, и нарыл в итоге еще один вариант скрытого элемента для формы. Подробности читайте ниже.

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 минут.

Ссылка на источник, откуда я позаимствовал информацию для этой статьи.

Что в итоге?

Ну в итоге всего этого я выполнил доработки формы согласно инструкции и оставил формочку собирать статистику. Посмотрим как она будет себя вести.

Юрий Ронин