Зміцнюємо безпеку сайту на WordPress. Частина 1

16

Від автора: таке може наснитися лише в страшному сні: одного разу ви відкриваєте свій веб-сайт і розумієте, що вас зламали. Якщо у вас звичайний блог, то для вас це не більше, як просто прикрий інцидент. Однак якщо ви є хостингом для сайту клієнта, то це буде дуже напружений день. Якщо ви взагалі власник інтернет-магазину з високими продажами, то хакерська атака може викликати у вас паніку. Щоб не трапилося ви точно не будете використовувати щасливі смайлики, коли кому-то розкажете про свою проблему. Так що вам потрібен план, як запобігти атаки ще до того, як вони відбулися.

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

Про безпеку в WordPress

Як ви думаєте, WordPress безпечна система? Якщо ви так не думаєте, це нормально. Багато людей думають, що WordPress небезпечна система управління контентом. Поки що все це дуже далеко від правди… принаймні зараз.

Що спільного у Microsoft Windows, Android, Google Chrome і WordPress? Це вкрай популярне програмне забезпечення, і люди постійно знаходять в них дірки в безпеці. Навіть якщо врахувати постійні патчі, латающие різні баги і проломи в безпеці, дірки в безпеці дійсно роблять це програмне забезпечення небезпечним?

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

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

Тим не менше, немає нічого безпечного на 100%. Ми живемо в такий час, коли вчені майже зламали код в наших мізках! Недоступних областей більше немає, мабуть наш мозок і WordPress не виключення. Але неможливість досягти стовідсоткової безпеки не означає, що ми повинні прагнути до показників начебто 99.999%.

Як підвищити безпеку WordPress

З особистого досвіду і проведених досліджень я виділив декілька основних заходів безпеки. Якщо ви досі не провели їх, то тепер повинні. Без зайвих церемоній розглянемо їх!

Безпека файлу .htaccess

Почнемо з простого. Якщо ваш сайт знаходиться на веб-сервері під управлінням Apache, і в настоянках включені «pretty permalinks», то WordPress згенерує файл .htaccess для зберігання базових інструкцій постійних посилань. Якщо ви не активували постійні посилання, то ядро WordPress не створить цей файл, я раджу вам створити вручну.

Підказка: Якщо ви хочете створити .htaccess вручну, але не розумієте, як створити файл без імені і з таким розширенням, просто завантажте будь-який файл (наприклад, Untitled.text) і змініть його ім’я і розширення через FTP клієнт.
Перше, що мені спадає на думку – треба захистити файл htacess. З усіх подальших моїх порад і підказок це найпростіше. Вам потрібно всього лише додати наступні рядки в цей файл:

# protect .htaccess
order allow,deny
deny from all

Нешкідливий спосіб захистити файл htaccess від кого-небудь (чого-небудь), хто хоче отримати доступ до нього. Тепер відкиньмо показ змісту папок:

# disable directory browsing
Options All -Indexes

Дана рядок запобіжить випадки, коли хтось хоче отримати доступ до папок зразок myblog.com/wp-content/uploads/. Зазвичай в директорії /uploads/ користувачі бачать завантажені файли або панель навігації по теки, але з даними забороною перед ними з’явиться відповідь сервера 403 Forbidden.

І в кінці я хочу додати чорний список з сайту Perishable Press: The 5G Blacklist. Це чорний список захистить ваш сайт від різного виду хакерських атак, від шкідливих строкових запитів і до підміненого користувальницьких агентів.

Все це було для файлу htaccess. Тепер же розглянемо файлу wp-config.php.

Поради з безпеки файлу wp-config.php і його вмісту

З точки зору безпеки файл wp-config.php напевно, найважливіший. З цим файлом можна робити дійсно дуже багато чого.

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

До речі, давайте повернемося в файл htaccess і заборонимо доступ до файлу wp-config.php:

# protect wpconfig.php
order allow,deny
deny from all

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

define( ‘DISALLOW_FILE_EDIT’, true );

Все ще думаєте, що ваш сайт не в безпеці? Вставте під верхнім рядком для заборони установки і видалення плагінів та тем:

define( ‘DISALLOW_FILE_MODS’, true );

Ще два ради з безпеки WordPress: Змініть префікси в базі даних і додайте ключі безпеки (солі) у файлі wp-config.php. Перший порада проста – Перевіряємо значення префікса за замовчуванням і знаходимо наступний рядок:

$table_prefix = ‘wp_’;

Якщо значення змінної wp_, то замініть його на будь-яке інше. Його не обов’язково запам’ятовувати, можете написати що завгодно. Я люблю використовувати щось типу wp_fd884vg_ — безпека і читаність забезпечені. Змінити ключі безпеки теж досить просто. Нижче представлені рядки, за замовчуванням значення яких повинні бути порожніми:

/**#@+
* Authentication Unique Keys and Salts.
*
* Change these to different unique phrases!
* You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}
* You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again.
*
* @since 2.6.0
*/
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’);

Якщо у вас замість значень варто «put your unique phrase here», це означає, що ключі ще не встановлені. У цьому випадку просто перейдіть за цим URL (є в коментарі до коду вище) і замініть рядок вище на згенеровані рядки цієї сторінки. Підказка: Якщо вам цікаво, що ж таке ці «солі», то на сайті WPBeginner є відмінна стаття про переваги їх використання. З файлом wp-config.php закінчили. На сьогодні, думаю, вистачить.

На сьогодні всі

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