Перевірка безпеки WordPress без входу в адмінку
Подивіться, що ваш сайт на WordPress показує будь-кому в інтернеті: версію ядра, плагіни, які вантажать сторінки, XML-RPC, відкритий журнал помилок і сторінки авторів, що видають логіни. Нічого не треба встановлювати, пароль адміністратора не потрібен.
Як ми впізнаємо сайт на WordPress
WordPress лишає в публічних сторінках помітні сліди: шляхи з wp-content/ і wp-includes/, посилання на /wp-json/, мета-тег generator, класи блоків у HTML і cookies WordPress. Коли таких ознак достатньо, до загальних перевірок, які отримує кожен сайт, додаються перевірки WordPress з цієї сторінки.
Якщо сайт добре ховає ці сліди, наприклад за окремим фронтендом, ми можемо не впізнати WordPress, і перевірки з цієї сторінки не запустяться. Загальні перевірки при цьому працюють як завжди: заголовки, сертифікат, пошта, відкриті файли й версії ПЗ, які видно ззовні.
Що дивиться перевірка безпеки WordPress
| Перевірка | Що запитуємо | Чому це важливо |
|---|---|---|
| Версія ядра | Тег generator на головній і /readme.html |
Старе ядро може мати відомі вразливості; відкритий readme часто показує версію |
| Плагіни | Шляхи плагінів і номери ?ver= на головній; readme.txt пʼяти поширених плагінів |
Застарілі плагіни - поширений шлях атаки; за версією ми шукаємо відомі проблеми |
| XML-RPC | /xmlrpc.php |
Часта ціль для підбору паролів; вимкніть, якщо не користуєтеся |
| Журнал помилок | /wp-content/debug.log |
Якщо файл завантажується, будь-хто бачить шляхи до файлів і подробиці помилок |
| Сторінки авторів | /?author=1 |
Можуть видати логін, а з ним підбирати пароль легше |
Пʼять файлів readme, які ми пробуємо, належать плагінам Slider Revolution, Elementor, WooCommerce, Contact Form 7 і Wordfence. Відкритий wp-login.php - це нормально, його ми не позначаємо.
Версії та відомі проблеми
Для ядра WordPress показуємо, чи визначена версія ще актуальна. Для ядра і кількох популярних плагінів (WooCommerce, Elementor, Yoast SEO, Contact Form 7, WP Super Cache і Jetpack) додатково шукаємо публічні повідомлення про вразливості за версією. Інші плагіни звіт просто перелічує, з версією, якщо її видно.
Версія з номера ?ver= чи файлу readme - це підказка, а не точне знання. Тому збіг звіт називає «потенційним», а не «вразливістю».
І всі перевірки, які отримує кожен сайт
Сайт на WordPress проходить і повну зовнішню перевірку: заголовки безпеки, сертифікат TLS, поштові записи, застаріле ПЗ на кшталт PHP, а також пошук файлів, яким не місце в інтернеті: резервних копій, файлів .env, теки .git чи інструментів для бази даних на зразок phpMyAdmin і Adminer.
Що робити з результатами
- Відкритий
debug.log: видаліть його, закрийте до нього доступ і вимкнітьWP_DEBUGна робочому сайті. Документація WordPress не радить користуватися інструментами налагодження на живих сайтах. - Старе ядро, плагіни чи теми: оновіть їх, а плагіни, якими не користуєтеся, видаліть.
xmlrpc.php: якщо він не потрібен жодному застосунку чи сервісу, вимкніть його. Якщо потрібен, обмежте частоту запитів на сервері чи в CDN, разом ізwp-login.php.- Сторінки авторів видають логін: переконайтеся, що жоден акаунт не має очевидного імені на кшталт
admin, і використовуйте надійні унікальні паролі. - Версія в тегу
generatorчи вreadme.html: прибрати її - охайно, але це не захист. Документація WordPress називає безпеку через приховування загалом ненадійною основною стратегією.
Чого ця перевірка не робить
- Не входить у ваш акаунт, нічого не встановлює і не читає адмінку. Плагіни, що не лишають слідів на головній, неактивні плагіни й версії тем лишаються невидимими.
- Не підбирає паролів, не викликає методів XML-RPC і не запускає експлойтів. Лише запитує адреси, перелічені вище.
- Не має власної бази вразливостей WordPress. Повідомлення беремо з публічних джерел, і вони охоплюють ядро та короткий перелік плагінів.
- Збіг за версією - привід перевірити, а не підтверджена вразливість; прихована версія не доводить, що сайт оновлений.
- Не шукає шкідливого коду і не перевіряє чорних списків.
Запитання
Чи треба встановлювати плагін або давати доступ до адмінки?
Ні. Перевірка працює ззовні, як браузер відвідувача, і потребує лише адреси сайту.
Відкритий wp-login.php - це проблема?
Ні, він є на кожному сайті WordPress. Важливо, як він захищений: надійні паролі, жодних очевидних імен акаунтів і обмеження частоти запитів до wp-login.php та xmlrpc.php.
Ми приховали версію WordPress. Тепер ми в безпеці?
Прихована версія трохи ускладнює сканування, але нічого не змінює в коді, який працює. Відомі проблеми закривають оновлення ядра, плагінів і тем.
Чим це відрізняється від плагіна безпеки всередині WordPress?
Плагін в адмінці бачить усі встановлені плагіни й файли. Ми бачимо лише те, що показує публічний сайт, а це саме те, що першим бачить і зловмисник. Ці два погляди доповнюють один одного.
Джерела
- WordPress: посилення захисту (англійською) developer.wordpress.org
- WordPress: атаки підбором паролів (англійською) developer.wordpress.org
- WordPress: налагодження (англійською) developer.wordpress.org
Перевірте свій сайт на WordPress
Введіть адресу сайту. Якщо ми впізнаємо WordPress, звіт покаже знахідки WordPress поруч із загальними результатами. Безкоштовно, без реєстрації, лише читання.
Перевіряйте лише свої сайти або ті, на які маєте дозвіл. Як працює наш сканер