Більшість власників сайтів не замислюються про їх безпеку, допоки вони не стануть жертвами атак зловмисників.
Як найбільш популярна web-платформа в інтернеті, WordPress є також і найбільш популярним об’єктом для хакерів та спамерів. WordPress має найбільш зручний для користувача інтерфейс серед платформ для вебсайтів, доступних онлайн, але щойно встановлений WordPress є надзвичайно уразливим до атак.

Згідно статистиці WP White Security, більш ніж 70 % встановлених WordPress є уразливими до хакерських атак і загальна кількість зламаних WordPress-сайтів у 2012 році склала колосальні 170000. І ця кількість зростає щороку.

Вам мабуть цікаво, навіщо комусь ламати ваш сайт, особливо якщо він має малу кількість відвідувачів. Однак переважна більшість хакерів не намагаються вкрасти ваші дані або видалити важливі файли. Все що вони роблять, це завантажують на ваш сервер скрипт для автоматичного розсилання спаму. Полегшити завдання для зловмисників можна нехтуючи оновленням WordPress та досить простими правилами/порадами щодо покращення безпеки Вашого сайту.

За таких обставин сервер заносять до чорного списку основні інтернет-провайдери та email-сервіси. Це можна виправити вилученням своєї IP адреси з чорного списку, наприклад, за допомогою інструменту перевірки blacklist checker з MXToolBox. Але всі ці маніпуляції для позбавлення від важких наслідків атаки скоріш за все коштуватимуть вам часу та грошей.

MXToolBox може перевірити, чи знаходиться ваш сервер у чорному списку.

У справі безпеки вебсайтів краще попередити проблему, аніж її вирішувати. Легковажно думати, що ваш вебсайт захищений, якщо він не піддавався атакам у минулому.

Ця стаття є вільним перекладом статті з відомого сайту wpmudev.org та доповнена нашими особистими порадами. Вона розповідає, що вам треба робити для того, аби Ваш сайт на WordPress був максимально захищеним від загроз.

Вона поділена на кілька частин для більш легкого сприйняття. У першій частині ми розглянемо такі питання:

  • Як хакери отримують доступ до Вашого сайту?
  • Безпека у WordPress – основні моменти

Як хакери отримують доступ до Вашого сайту?

Важливо розуміти, як хакери отримують доступ до сайту WordPress та діють в нечесний спосіб. Хоча існує безліч засобів, за допомогою яких хакер вдирається на сайт  WordPress, основні техніки можуть бути згруповані за категоріями. У статті WP White Security була наведена статистика зламаних сайтів:

  • 41% були зламані через уразливість хостинг-акаунту
  • 29% були зламані через проблеми безпеки у темі WordPress, яку вони використовували
  • 22% були зламані через проблеми безпеки у плагінах WordPress, які вони використовували
  • 8% були зламані через слабкий пароль

Як видно, що 41% атак пов’язані з питаннями безпеки на хостингу, про яку ВИ, як власник акаунту, маєте піклуватись в першу чергу. Існує велика кількість технік зламу цієї спрямованості. Наприклад, використання директорій із встановленими правами запису “ДЛЯ ВСІХ”, сторонніх скриптів, таких як timthumb (наразі вразливість в ньому виправлена) та подібних.

Загалом 51% атак були здійснені через плагіни та теми WordPress. Хакери можуть робити вставки eval base 64 зашифрованого коду, що дозволяє їм запускати PHP функції з вашого веб сайту (в тому числі надсилати спам). Вони можуть також зробити “чорний вхід” десь на вашому сайті, з наміром у майбутньому скористатися ним для доступу на ваш сайт, навіть після того як ви впевнилися в тому, що видалили всі шкідливі файли.

Останнім в списку є слабкий пароль. Хакери продовжують отримувати доступ таким чином, використовуючи автоматизовані скрипти, що продовжують вгадувати паролі, допоки не отримають доступ. Така техніка називається brute force.

Безпека у WordPress – основні моменти

Хакери не шукають тяжкого шляху для отримання доступу до сайту. Вони стежать за сайтами WordPress, що є вразливими через дірки в безпеці. Виходячи з цього, ви можете ефективно попередити 99.99% атак на вашому сайті просто вирішивши основні питання безпеки.

В цьому розділі пройдемося по методах, які ви можете застосувати до вашого вебсайту, щоб зробити його більш захищеним. Їх застосування має зайняти до 30 хвилин. Все, що ви маєте зробити, це змінити декілька ключових файлів, таких як .htaccess та wp-config.php.

Пам’ятайте, що профілактика краща за лікування. Якщо ви дослухаєтесь порад, даних у цьому розділі, ви значно ускладните завдання хакерам.

Обирайте гарний хостинг

Оскільки 41% зламів були спричинені проблемами безпеки на хостингових платформах, серед усього іншого набуває важливе значення якість хостингової компанії. Шукайте хостингову компанію, яка робить акцент на безпеці. Таку що має:

  • Підтримку останніх версій PHP та MySQL
  • Оптимізована для WordPress
  • Сканує на наявність шкідливих програм та небажаних файлів
  • Навчає свій персонал з питань безпеки WordPress

Якщо ви обрали віртуальний хостинг, впевніться, що хостинг забезпечує ізоляцію акаунту. Це дає впевненість у тому, що жоден акаунт не зможе перевантажити сервер та спричинити проблеми для вашого сайту. Хороші хостингові компанії також запропонують щоденні внутрішні бекапи, але слід також здійснювати зовнішні бекапи (більше про це далі).

Я рекомендую наш хостинг-проект  WPHost.me, що відповідає усім описаним вимогам:

  1. Використовуються останні версії програмного забезпечення.
  2. Сервери оптимізовані для роботи з WordPress
  3. Усі файли регулярно проходять перевірку серверними сканерами на предмет знаходження шкідливого коду/файлів
  4. Персонал встановить для Вас WordPress, з урахуванням практики щодо посиленої безпеки сайту
  5. Всі акаунти користувачів ізольовані один від одного в окремі “віртуальні середовища” за допомогою технології CloudLinux

Важливі налаштування при встановленні

Ключі безпеки WordPress (WordPress Security Keys) були вперше представлені в версіях 2.5, 2.6, та 2.7. Ключі поліпшують шифрування інформації, що зберігається у cookies відвідувача. Також вони ускладнюють злам вашого пароля, так як до нього додаються випадкові елементи. Секретні фрази забезпечують ще більшу надійність.

Ключі можуть бути змінені в wp-config.php. Це важливий файл конфігурації, що знаходиться в корені вашого встановленого WordPress. Якщо ви ще не додали секретні ключі до вашого файлу wp-config.php, це буде виглядати приблизно так:

define('AUTH_KEY', 'put your unique phrase here');
define('SECURE_AUTH_KEY', 'put your unique phrase here');
define('LOGGED_IN_KEY', 'put your unique phrase here');
define('NONCE_KEY', 'put your unique phrase here');
define('AUTH_SALT', 'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT', 'put your unique phrase here');
define('NONCE_SALT', 'put your unique phrase here');Code language: JavaScript (javascript)

Вісім ключів можуть бути згенеровані через WordPress Salt Keys Generator. Як тільки код згенеровано,  ви просто замінюєте код, що бачите вище, унікальними згенерованими фразами:

define('AUTH_KEY', 'w^f{6KRGRuaHF<v]un;?&6]>23[kA-3x|WoQ{W8SNv:!');
define('SECURE_AUTH_KEY', ':)xuZ-p)a:(Ij|-8AtCt1ds4lBm=uD/y}d!FOkZi&7-Y');
define('LOGGED_IN_KEY', '} Oc.qOa5bbSqh(~Tiu,[`Sda!P(5%l9{5ebmT-3=_`:');
define('NONCE_KEY', 'C;xA<Q|h=S`77L+:`mA&Fx(LKG|s6$6zm:gH!+EMI0zl');
define('AUTH_SALT', 'f [Q-$3A4,?F{G>F{ZRDKIc:Mg~Z&fw2/,mA5^YTWOnL');
define('SECURE_AUTH_SALT', 'FT1#6+2=eX <}AnrgpumT6~Hb/vS|}11+ZIx]ha.{R]{');
define('LOGGED_IN_SALT', 'HPW;?Iy%gnhbuzQ:>r&5BD]jsjc}<<0P*N|V$9QVK?fF');
define('NONCE_SALT', 'VAR!;oueIhLK{RvZ@$|f+uHc8iFbo.7O2 r~JV+k-,~]');Code language: JavaScript (javascript)

* Зауважте, що даний код, є лише прикладом. Ви маєте самостійно згенерувати коди для вашого веб сайту.

WordPress застосовує префікс до таблиць баз даних. За замовчуванням префіксом є wp_. Наприклад, wp_posts, wp_terms і т.д. Зміна префіксу таблиць може допомогти запобігти уразливості до SQL ін’єкцій, таким чином хакерам знадобиться вгадувати префікс, що, в свою чергу, зупинить їх від отримання доступу до вашої бази даних.

Ви знайдете префікс до назв таблиць у вашому файлі wp-config.php:

$table_prefix = 'wp_';Code language: PHP (php)

Просто змініть префікс таблиць на щось заплутане, щоб люди або скрипти не могли його вгадати. Наприклад:

$table_prefix = 'asdfadsfa894sdms_';Code language: PHP (php)

Зміна префіксу в файлі wp-config.php не змінить автоматично префікс ваших таблиць WordPress у базі даних, якщо ви вже встановили WordPress. Тому, якщо ви змінюєте префікс на вже існуючому сайті, ви також маєте оновити базу даних.

Не забувайте робити резервну копію бази даних та файлів перед змінами!

Найшвидший метод це зробити – встановити плагін iThemes Security. Він може автоматично зробити всі необхідні зміни за вас.

Також можна зробити це вручну. Це забирає більше часу, але може знадобитися, якщо ви не можете цього автоматично зробити за допомогою плагіна.

Є два доступні вам методи зробити це через PHPMyAdmin (процес буде майже ідентичним і в інших менеджерах баз даних).

Перший метод – використати SQL запит, щоб перейменувати всі таблиці. Знизу наведений приклад:

RENAME table 'wp_links' TO 'newprefix_links';Code language: JavaScript (javascript)

Очевидно, ви маєте змінити newprefix у прикладі на той, що ви зазначили новим префіксом у wp-config.php.

Ви маєте виконати цей запит для кожної таблиці бази данних, включаючи всі основні таблиці і будь-які додані плагінами таблиці.

Іншим способом є клікнути на назві таблиці і потім клікнути на панелі операцій. Ця панель дозволяє змінювати важливі характеристики таблиць, в тому числі їх назву. Цей крок необхідно повторити для кожної таблиці.

rename-table-prefix

Потім ви маєте оновити посилання на новий префікс у таблицях usermeta та options. Це також можна зробити у PHPMyAdmin за допомогою SQL запиту.

Для оновлення таблиці usermeta (оригінальна назва wp_usermeta), виконайте наступний запит у закладці SQL на вказаній таблиці:

UPDATE 'newprefix_usermeta' SET 'meta_key' = REPLACE( 'meta_key', 'wp_', 'newprefix_' )Code language: JavaScript (javascript)

Для оновлення таблиці options (оригінальна назва wp_options), виконайте наступний запит у закладці SQL на вказаній таблиці:

UPDATE 'newprefix_options' SET 'option_name' = 'newprefix_user_roles' WHERE 'option_name' = 'wp_user_roles'Code language: JavaScript (javascript)

Не забувайте в обох прикладах змінити новий префікс на той, що Ви вказали у wp-config.php

Отже у підсумку, план дій для зміни префіксу такий:

  1. Перейменувати таблиці
  2. Оновити посилання у таблиці usermeta
  3. Оновити посилання у таблиці options

Не дивлячись на те, що ми описали декілька варіантів зміни префіксу, я все ж рекомендую використовувати плагін iThemes Security, він дозволяє зробити більшість дій одним кліком.

Оновлюйте WordPress

Кожна нова версія WordPress містить зміни, що виправляють дірки у безпеці, знайдені у попередніх версіях. Таким чином, якщо Ви використовуєте застарілу версію – Ваш сайт більш схильний до ураження від дій зловмисників. Саме тому важливо завжди оновлювати WordPress до останніх версій. Єдине виключення, як на мій погляд, коли виходить “глобальне” (major) оновлення, а не підверсія (minor). Такі оновлення, окрім змін у безпеці, несуть у собі різноманітні глобальні зміни у функціях/можливостях WordPress. Оновлення WordPress до такої версії може призвести до несумісності активних плагінів та шаблонів/тем, що в свою чергу часто призводить до непрацездатності сайту взагалі.

“Мажорні” версії, як вже сказано, несуть у собі різноманітний новий функціонал і випускаються двічі на рік. Їх легко визначити за номером, який змінюється кожен раз на 0.1, наприклад 3.7, 3.8, 3.9 і т.д. Майже з кожним “мажорним” оновленням випускаються “мінорні”. Ці оновлення включають виправлення помилок, знайдених у відповідних “мажорних” версіях, та виправлення дір у безпеці. “Мінорні” версії за номером змінюються на 0.01 , тобто мають номери подібні до 3.9.1, 3.9.2 і т.п.
Починаючи з версії 3.7 у WordPress з’явилась нова функція автоматичного оновлення без втручання власника сайту. Багато хто хибно вважає, що ця функція встановлює усі можливі оновлення, але за замовчуванням WordPress оновиться лише до нової “мінорної” версії.
Також є можливість встановлювати автоматично і “мажорні” оновлення. Це зніме з Вас обов’язок робити ці оновлення вручну (особисто я, виходячи з практики, всеж таки не радила б такого). Аби увімкнути оновлення всіх видів просто додайте до Вашого конфігураційного файлу wp-config.php наступні рядки:

# Дозволити мажорні та мінорні автоматичні оновлення WordPress:
define( 'WP_AUTO_UPDATE_CORE', true );Code language: PHP (php)

Якщо Ви бажаєте вручну робити усі оновлення, Ви можете деактивувати автоматичний процес оновлень, додавши до файлу wp-config.php наступні рядки:

# Відключити мажорні та мінорні автоматичні оновлення WordPress:
define( 'WP_AUTO_UPDATE_CORE', false );Code language: PHP (php)

Плагіни та теми WordPress

Через дірки у безпеці в коді плагінів та тем зловмисники отримують доступ до сайтів у більш ніж у 50% випадків. Тому дуже важливо зважити всі “за” та “проти”, перед тим як скористатися тим чи іншим плагіном/темою.

  • Будьте більш прагматичним, приймаючи рішення про встановлення нового плагіну. Якщо Ваш сайт може працювати без цього плагіну – краще не встановлюйте його.
  • Тричі подумайте, якщо плагін, який Ви бажаєте встановити, не оновлювався довгий час, оскільки код такого плагіну може містити багато “дірок”
  • Усі плагіни створенні різними людьми. Якщо один створений з урахуванням усіх аспектів безпеки та має якісний програмний код, інший може полегшити зловмиснику отримати доступ до Вашого сайту.

Для шаблонів не менш важливо, як часто вони оновлюються та на скільки якісний код мають. Один з варіантів, як можна перевірити якість коду шаблону чи плагіну – це використати відповідно плагіни Theme Check або Plugin Check.

Наступний важливий крок до створення максимально захищеного сайту – не використовуйте теми та плагіни, що пропонуються до завантаження на неперевірених/невідомих ресурсах, вони можуть містити “шкідливий” код.

До речі, шаблони та плагіни можна також оновлювати автоматично, для цього потрібно додати такий код до wp-config.php для оновлення плагінів:

add_filter( 'auto_update_plugin', '__return_true' );Code language: JavaScript (javascript)

і такий для оновлення тем:

add_filter( 'auto_update_theme', '__return_true' );Code language: JavaScript (javascript)

Зауважте! Усі застереження щодо автоматичного оновлення WordPress, описані вище, актуальні і для оновлення шаблонів/плагінів. А також важливо, що автооновлення буде працювати за умови, що плагін чи тема його підтримують (завантажені з офіційного репозиторію WordPress.org)

WordPress має вбудований редактор файлів, що містяться у директоріях встановлених плагінів та тем. Якщо зловмисник отримає доступ до адміністративної частини Вашого сайту, він зможе внести зміни у ці файли. Аби уникнути цього, можна відключити редактор файлів, додавши до wp-config.php наступний рядок:

define( 'DISALLOW_FILE_EDIT', true );Code language: JavaScript (javascript)

Якщо Ви бажаєте відключити можливість встановлення та оновлення тем та плагінів через адмінку взагалі, можна додати такий рядок до того ж файлу конфігурації:

define( 'DISALLOW_FILE_MODS', true );Code language: JavaScript (javascript)

Використання коректних прав доступу до файлів/директорій

Це ще один з важливих моментів у покращенні безпеки. Встановлення прав доступу до директорії 777 (дозволено запис усім) дає можливість зловмисникам завантажувати в цю директорію різноманітні файли або змінювати вже ті, що там є. Рекомендується встановити наступні права (зазвичай можна це зробити через хостинг-панель або фтп-клієнт):

  • Усі директорії повинні мати права 755 або 750
  • Усі файли – 644 чи 600
  • Для wp-config.php встановіть 600

Більш докладно про права доступу до файлів/директорій можна дізнатись тут (англійською).

Якщо ви не впевнені щодо вибору значень або способу їх встановлення, які треба встановити для прав доступу, зверніться до свого хостинг-провайдера.

На сьогодні, я вважаю, досить інформації ) . Будемо раді відповісти на Ваші запитання у коментарях, отже не зволікайте можливістю прокоментувати 😉

Друга частина статті доступна за цим посиланням

Author

Дмитро Кондрюк в веб-індустрії з 2003 року. В 2009р. заснував проект Український WordPress (що у подальшому став офіційним сайтом команди локалізації WordPress в Україні). З 2010 року засновник і технічний директор проекту Український хостинг для WordPress (WPHost.me) - повноцінного хостинг-сервісу, максимально оптимізованого на використання CMS WordPress.

Коментувати