Контактні форми WordPress: список перевірок безпеки
Contact Form 7, WPForms, Gravity Forms, Ninja Forms або Fluent Forms — плагін менш важливий, ніж його налаштування й обслуговування. Ось що перевіряти та що перевіряти повторно після кожного оновлення.
Більшість сайтів WordPress використовує один із кількох плагінів форм: Contact Form 7, WPForms, Gravity Forms, Ninja Forms, Fluent Forms і ще кілька. Кожен із них може працювати безпечно або залишатися цілком відкритим. Різниця рідко полягає в самому плагіні, а радше в його налаштуваннях, доповненнях навколо, способі виходу пошти із сервера та тому, що відбувається з повідомленнями після надходження.
- Підтримуйте актуальність плагіна форм і кожного доповнення та видаляйте ті, якими більше не користуєтеся.
- Увімкніть власний антиспам плагіна — поле-пастку, інтеграцію CAPTCHA, Akismet, де доречно, — і переконайтеся, що він справді працює.
- Надсилайте повідомлення через SMTP з автентифікацією з адреси на власному домені.
- Обмежуйте завантаження файлів за типом і розміром та не допускайте публічного переліку чи перегляду завантажених файлів.
- Не залишайте адресу електронної пошти одержувача на сторінці та в її вихідному коді.
- Зберігайте лише потрібні дані й лише стільки, скільки вони потрібні.
- Виконуйте коротку перевірку після кожного оновлення WordPress, теми або будь-якого плагіна.
Оновлення: плагін форм і все навколо нього
Плагіни форм — популярні цілі, оскільки приймають введення від будь-кого в інтернеті. Виправлення безпеки надходять як звичайні оновлення, тож оновлюйте своєчасно — і не лише основний плагін. Доповнення для платежів, завантаження файлів, під’єднання CRM, умовної логіки або додаткових постачальників CAPTCHA — окремий код із власними вразливостями. Так само й плагіни, які Ви колись установили для тесту та забули. Вимкнення недостатньо: вимкнені плагіни досі на сервері, а їхні файли в деяких випадках доступні безпосередньо. Якщо не користуєтеся — видаліть.
Антиспам: увімкніть і доведіть, що він працює
Більшість плагінів форм має власні можливості антиспаму або інтегрується із зовнішніми сервісами: поле-пастка, яке боти заповнюють, а люди ніколи не бачать, CAPTCHA на кшталт reCAPTCHA, hCaptcha чи Cloudflare Turnstile та Akismet, який звіряє вміст повідомлення з базою спаму. Варіанти залежать від плагіна й версії, тож перевіряйте налаштування, а не припускайте. Зовнішні CAPTCHA завантажують сторонні скрипти, а Akismet надсилає надісланий вміст зовнішньому сервісу — обидва мають бути у Вашій політиці конфіденційності та, залежно від налаштування, в управлінні згодою.
Поширеніша проблема — захист увімкнено, але він не працює. CAPTCHA на загальнодоступних тестових ключах пропускає все. Віджет, скрипт якого блокується плагіном кешування чи оптимізації або помилкою JavaScript, нічого не зупиняє. Поле-пастку без стилів приховування оголошують програми читання з екрана й заповнюють справжні відвідувачі. Тож після кожної зміни відкрийте форму в приватному вікні, перевірте консоль браузера й вихідний код сторінки та надішліть тестове повідомлення. Якщо потрібен захист без залежності від Google, безкоштовний плагін formexposed для WordPress додає поле-пастку, перевірку часу й підтвердження роботи та повторно перевіряє сайт після оновлень плагінів — один із кількох варіантів.
Пошта: як надсилається й куди йде
За замовчуванням WordPress передає пошту функції PHP mail на сервері, і на багатьох хостингах ці повідомлення погано автентифіковані та потрапляють до спаму або мовчки зникають. Натомість надсилайте через плагін SMTP або поштовий сервіс хостингу, використовуючи справжню скриньку з ім’ям користувача й паролем та адресу відправника на власному домені, наприклад окрему адресу forms@. Записи SPF, DKIM і DMARC домену мають охоплювати цього відправника. Не ставте адресу відвідувача в поле From: це не Ваш домен, тож повідомлення не може пройти узгодження DMARC і залежно від політики домену відвідувача потрапляє до спаму або відхиляється. Установіть її як Reply-To, і Ви все одно зможете відповісти одним натисканням.
Адреса одержувача має бути в налаштуваннях плагіна, а не на сторінці. Перевірте вихідний код контактної сторінки: посилання mailto поряд із формою або приховане поле з адресою одержувача віддає її кожному боту-збирачу. У старіших або самостійно створених формах може бути гірше: якщо сервер довіряє прихованому полю одержувача, будь-хто може змінити його й використати Вашу форму для надсилання листів на довільні адреси.
Завантаження файлів і збережені дані
Завантаження файлів — найризикованіша функція форми, тож спочатку запитайте, чи взагалі вона потрібна. Якщо так, дозволяйте лише справді очікувані типи, наприклад PDF і поширені формати зображень, замість блокування кількох небезпечних, та встановіть ліміт розміру. Перевірте, де плагін зберігає файли: вони не повинні перелічуватися в публічному каталозі, а в ідеалі — взагалі не бути доступними за адресою, яку можна вгадати. Видаляйте їх після опрацювання або надсилайте вкладеннями замість зберігання на сервері.
Багато плагінів форм або їхніх доповнень зберігає кожне надсилання в базі даних WordPress, часто включно зі спамом. Це корисний резерв у разі відмови пошти, але також дедалі більша купа персональних даних. За принципом обмеження зберігання GDPR (ст. 5(1)(e)) такі дані не слід зберігати довше, ніж потрібно. Вирішіть, чи потрібні Вам збережені записи, які поля та на який строк, а потім використовуйте автоматичне видалення плагіна, якщо воно є, або регулярно видаляйте старі записи. Резервні копії бази даних містять ті самі дані.
Після кожного оновлення
- 1Відкрийте контактну сторінку в приватному вікні: форма та її антиспам-елемент відображаються правильно, а консоль браузера не показує помилок.
- 2Перегляньте вихідний код сторінки: поле-пастка та скрипт CAPTCHA досі на місці, а адреси одержувача немає.
- 3Надішліть тестове повідомлення: воно потрапляє до вхідної пошти, а не до спаму, і заголовки показують успішні SPF, DKIM і DMARC.
- 4Перевірте важливі налаштування: одержувач, адреса відправника, дозволені типи й розміри файлів, строк зберігання записів.
- 5Переконайтеся, що посилання на політику конфіденційності та будь-який текст згоди досі показано біля форми.
- 6Занотуйте дату й перевірене, щоб знати, коли форма востаннє підтверджено працювала.
Коли це стає звичкою, воно займає мало часу й виявляє саме ті тихі відмови, які інакше залишаються непоміченими тижнями. Для зовнішнього погляду безкоштовна перевірка на formexposed.com переглядає публічні сторінки форм сайту, нічого не надсилаючи, і показує, чи є очікуваний захист та чи дієво його налаштовано, — без облікового запису.