Спам в контактната форма — как да го спрете без пъзели
Спам в контактната форма се спира на сървъра: невидима проверка, токен на Turnstile или reCAPTCHA v3 и Akismet, без да отблъсквате реалните клиенти.

Спам в контактната форма се спира най-надеждно с проверка на сървъра, а не с пъзели за посетителя. Най-често това е невидима проверка (токен на Cloudflare Turnstile или оценка на reCAPTCHA v3) плюс филтър като Akismet, а настройката отнема около час.
Резервно копие не е нужно за самата форма, но ако променяте плъгини или код в темата, направете копие на сайта предварително. Мерките по-долу са подредени от най-евтината към най-тежката.
Какво точно е спамът през форма и защо идва
OWASP описва спама като автоматично добавяне на съмнително или вредно съдържание в публично или лично съобщение. Примерите включват реклама, злонамерени връзки, проследяващ код и опити за манипулация на търсачките (OWASP). Ботовете не четат сайта Ви. Те намират поле за въвеждане и го пълнят.
Затова защитата трябва да различава човек от скрипт, без да пита човека. Всяка допълнителна стъпка за реалния клиент е изгубено запитване.
Кои методи не затрудняват посетителите
Първата линия е скрито поле (honeypot). Това е допълнително поле, скрито със CSS, което човек никога не попълва, а бот го попълва. Ако то дойде с текст, отхвърлете съобщението. Методът не струва нищо, но спира само най-простите скриптове, затова не го ползвайте сам.
Втората линия е минимално време за изпращане. Човек не попълва форма за две секунди. Отхвърляйте съобщения, изпратени по-бързо от няколко секунди след зареждане на страницата. Това е наше практическо правило, а не число от документацията.
Третата линия е външна проверка с токен, описана в следващите раздели. Тя се комбинира с първите две, защото никой отделен метод не хваща всичко.
Как работи Cloudflare Turnstile и струва ли пари
Turnstile е алтернатива на CAPTCHA, която може да се добави към всеки сайт, дори трафикът да не минава през мрежата на Cloudflare (Cloudflare). Обикновено не показва пъзел. Прави малки проверки в браузъра и увеличава трудността само при съмнителни заявки.
Режимът „Managed“ е препоръчителният: показва поле за отметка само когато рискът го налага (Cloudflare). Има и режими „Non-interactive“, при който посетителят не взаимодейства с джаджата, и „Invisible“, при който тя е напълно скрита.
Страницата с общото описание не казва дали услугата е безплатна и препраща към отделна страница с планове (Cloudflare). Проверете условията там, преди да я въвеждате.
Най-често правена грешка е да се сложи само джаджата на страницата. Документацията изисква да извикате Siteverify API, за да завършите внедряването, и казва, че клиентската част сама не защитава формата (Cloudflare). Токенът важи 300 секунди и се приема само веднъж, а при повторно или закъсняло използване проверката връща грешка timeout-or-duplicate. Ботът, който пренебрегне джаджата и изпрати формата директно, минава, ако сървърът Ви не проверява токена.
Как да ползвате reCAPTCHA v3 и какво да знаете за личните данни
reCAPTCHA v3 не пита посетителя за нищо. Връща оценка от 0.0 до 1.0, като по-ниска стойност означава по-вероятен бот (Google). Прагът по подразбиране е 0.5, а Google препоръчва първо да наблюдавате трафика си в административната конзола и да действате във фонов режим вместо да блокирате веднага.
Токенът изтича след две минути, затова го заявявайте при изпращане, а не при зареждане на страницата (Google). Проверявайте и върнатото име на действие, за да съвпада с очакваното.
Има и въпрос за личните данни. reCAPTCHA поставя необходима бисквитка с име _GRECAPTCHA за анализа на риска (Google). Ако скриете значката, трябва да покажете видимо текста „This site is protected by reCAPTCHA“. Страницата не разглежда съгласието на посетителя. Това е причина да прегледате текста на банера си в материала за бисквитки и съгласие.
За голям брой заявки Google изисква друг режим. Над един милион извиквания месечно е нужен Enterprise или одобрено изключение (Google). Малък сайт рядко стига дотам. Ако ключът надхвърли квотата, проверката на v3 може да се провали „отворено“ и да върне статична оценка 0.9, тоест ботовете започват да минават. Затова следете квотата, ако сайтът нарасне.
Помага ли Akismet и защо nonce не е достатъчен
Akismet проверява съобщения от коментари и форми за контакти спрямо обща база със спам и маркира вероятния спам (WordPress.org). Ключът е безплатен за лични блогове, а за търговски сайтове е нужен платен абонамент. Изискванията са WordPress 5.8 и PHP 7.2 или по-нови.
Има и страничен ефект: съдържанието на съобщенията се изпраща на външна услуга (WordPress.org). Споменете това в политиката за поверителност на сайта. Обърнете внимание и че филтърът може да сбърка, затова периодично прегледайте папката със спам.
Nonce-ът на WordPress често се бърка със защита срещу спам. Той пази от CSRF атаки, но не пази от повторно изпращане, защото не се проверява за еднократно ползване (WordPress.org). По подразбиране всички гости (потребител с номер 0) получават един и същ nonce, така че за анонимните посетители на контактна форма той почти не пази. Нашият извод е, че nonce-ът е полезен, но не е мярка срещу ботове.
Как да проверите, че защитата работи
Направете три теста. Изпратете форма като обикновен посетител и проверете, че имейлът пристига. После изпратете същата форма с изключен JavaScript и ясно очаквайте отказ. Накрая преизползвайте същия токен втори път, за да видите дали сървърът го отхвърля, както описва Cloudflare (Cloudflare).
Следете броя на получените съобщения седмица след промяната. Ако идват истински запитвания, но липсват такива от познати клиенти, понижете прага и проверете папката със спам.
Допълнете защитата с имейл автентикация на домейна, защото подмененият подател влошава доставката. Вижте как се настройват SPF, DKIM и DMARC. Защитете и входа в администрацията с двуфакторна автентикация, защото форма с форсиран достъп е друга врата.
Какво няма публично сравнение
Не е публикувано независимо сравнение колко спам спира всеки от тези методи, затова процент на успеваемост не можем да посочим. OWASP описва самата заплаха, но препраща към отделния Automated Threat Handbook за мерките срещу нея (OWASP). Цената на Turnstile се определя от страницата с планове на Cloudflare, която препраща от общото описание (Cloudflare).
Използвани източници
- Cloudflare Turnstile overview — Cloudflare
- Turnstile server-side validation — Cloudflare
- reCAPTCHA v3 — Google
- reCAPTCHA FAQ — Google
- Nonces – Common APIs Handbook — WordPress.org
- Akismet Anti-spam plugin — WordPress.org
- OAT-017 Spamming — OWASP
Още по темата
Текстът е на Редакцията на WebMaster.bg. Фактите са по източниците, посочени под материала. Редакционна политика · Забелязахте грешка? Пишете ни на kontakt@webmaster.bg.