Блоґ про WordPress

Безпека WordPress: Вичерпний огляд, частина 2

Вітаю! Продовжуємо робити наші сайти на WordPress більш захищеними ). Першу частину огляду ви можете знайти тут.

У другій частині ми розглянемо такі питання:

  • Повідомлення про помилки скриптів (PHP Error Reporting)
  • Захист через файл .htaccess
  • XML-RPC
  • Авторизація (логіни та паролі)

Повідомлення про помилки скриптів

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

error_reporting(0);
@ini_set('display_errors', 0);

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

Захист через файл .htaccess

Файл .htaccess дуже потужний інструмент, за допомогою якого можна керувати різними налаштуваннями серверу. Через нього можна робити переадресацію з одного посилання на інше, завдяки йому працюють гарні "урл" на вашому сайті. В нашому випадку ми розглянемо, як цей файл може допомогти ще краще захистити ваш сайт.

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

<files wp-config.php>
order allow,deny
deny from all
</files>

Аби заборонити доступ до адміністративної частини вашого сайту усім, окрім комп'ютерів із зазначеними IP адресами, додайте наступний код  (змініть адреси у прикладі на свої) . Але додати їх треба в окремий файл .htaccess , який потрібно створити у директорії /wp-admin/ .

order deny,allow
allow from 102.108.5.1
deny from all

Більше однієї адреси можна додати, якщо продублюєте рядок allow from. Наприклад:

order deny,allow
allow from 102.108.5.1
allow from 103.406.7.8
deny from all

Файл wp-login.php , що знаходиться у кореневій директорії вашого сайту, може також бути захищений, аби доступ до нього отримували лише з визначених адрес. Цей файл автоматично переадресує кожного авторизованого користувача до адмін-панелі /wp-admin/.

<Files wp-login.php>
order deny,allow
Deny from all
# дозволити мої IP адреси
allow from 102.108.5.1
</files>

Захист адмін-панелі через обмеження доступу до директорії - часто не найкращий варіант, через можливі конфлікти із плагінами та темами, особливо тими, що використовують Ajax. Аби уникнути цих конфліктів, спробуйте додати наступний код у файл .htaccess , що у корені папки /wp-admin/:

# Дозволити доступ до wp-admin/admin-ajax.php
<Files admin-ajax.php>
    Order allow,deny
    Allow from all
    Satisfy any
</Files>

Якщо ви знаєте IP-адресу того, кого б ви не хотіли допустити до сайту взагалі, ви можете додати наступні рядки в .htaccess у кореневій директорії сайту:

order allow,deny
deny from 106.103.8.9
allow from all

Директорія /wp-includes/ містить багато важливих файлів із дистрибутиву WordPress, без яких WP не буде працювати. Звичайним відвідувачам зовсім не потрібно мати доступ до перегляду вмісту цієї директорії. Для її захисту можна додати такі рядки у .htaccess, що у корені сайту:

# Блокування файлів з директорії /wp-include/

RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]

Аби заборонити людям переглядати вміст директорій на сайті через браузер, додайте наступний код у той самий .htaccess :

Options All -Indexes

Закономірним є бажання захистити сам файл .htaccess, для цього в ньому потрібно прописати таке:

<Files .htaccess>
order allow,deny
deny from all
</Files>

Директорія із завантаженими темами, плагінами та іншими файлами сайту /wp-content/ може бути захищена таким чином - створіть у ній окремий файл .htaccess та додайте такі рядки:

order deny,allow
deny from all
<Files ~ ".(xml|css|jpe?g|png|gif|js)$">
    Allow from all
</Files>

Описані рядки забороняють доступ відвідувачів до усіх файлів у директорії /wp-content/ окрім XML, CSS, Javascript та зображень. Зауважте, цей код може конфліктувати з деякими темами/плагінами, оскільки забороняє виконання пхп-скриптів, якщо відкривати їх напряму, наприклад таких як timthumb.php.

Деактивація XML-RPC

Починаючи з версії WordPRess 3.5, XML-RPC активно за замовчуванням. Ця можливість дозволяє віддалено підключатись через різноманітні блог-клієнти до вашого сайту. Також вона використовується для трекбеків та пінгбеків. На жаль, зловмисники часто використовують цю можливість для атак на сайти.
Аби вимкнути цю можливість, можна використати плагін, такий як Disable XML-RPC Pingback та зменшити ризик того, що ваш сайт буде атакований.

Посилення даних авторизації - логін та пароль

Слабкий пароль дозволяє хакерам отримати доступ до сайту досить легко, використовуючи автоматизовані системи підбору паролів. Основні поради, аби ускладнити їм задачу:

  • Час від часу змінюйте пароль
  • Не створюйте простих паролів, на зразок qwerty123, дати народження та подібних. Для генерації складного паролю можна використати такі інструменти як Strong Password Generator, Passwords Generator чи Norton Password Generator
  • Зберігайте паролі у менеджерах паролів, наприклад OnePassword, KeePass, RoboForm, Passpack чи LastPass
  • Зобов'язуйте користувачів вашого сайту використовувати також складні паролі, для цього можна скористатися плагіном Force Strong Passwords

З давніх часів WordPress використовує ім'я користувача admin як логін адміністратора за замовчуванням. Останні версії при встановленні дозволяють обрати ім'я/логін самостійно, однак багато хто досі використовує логін admin.
Проблема у тому, що хакери знають про це. Тому перед ними стоїть задача лише підібрати пароль в таких випадках, що спрощує завдання отримання доступу до сайту у два рази.
Я рекомендую змінити цей логін, якщо ви досі його використовуєте, це сильно покращить якість безпеки вашого сайту.
Найпростіший варіант, аби це зробити, - використати плагін Admin renamer extended.

Обмежте кількість спроб авторизації

Хакери використовують brute force атаки для підбору паролів, кожен раз намагаючись авторизуватись з новим паролем. Один з найкращих способів захистити сайт від такого роду атак - встановити плагін Login LockDown чи Login Security Solution (перший можу рекоменжувати, використовували не один раз). Ці плагіни обмежують кількість спроб авторизації на сайті.

login-lockdown

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

Авторизація у два етапи

Такий спосіб ще більше ускладнює, а в багатьох випадках унеможливлює отримання доступу через brute force атаку. Сенс у використанні додаткового коду при авторизації, без якого вона не буде успішною. Наприклад, такий код може надсилатися на ваш мобільний.
Ось декілька плагінів, які можна для цього використати:
Google Authenticator – потребує ввести код чи QR-код що буде надано мобільним додатком Google Authenticator
Clef – Дозволяє авторизуватись без паролю, використовуючи мобільний телефон
Clockwork SMS – Надсилає смс на мобільний із секретним кодом
Duo Two-Factor Authentication – Надає декілька варіантів двох етапної авторизації, таких як мобільний додаток, смс чи дзвінок на телефон
Authy Two Factor Authentication – потребує введення коду з мобільного додатку
Stealth Login Page – авторизація з використанням секретного коду
Зауважте, багато плагінів не підходять для використання з українськими мобільними операторами

Сховайте сторінку авторизації

Ще однією проблемою є те, що всім відома сторінка авторизації, точніше її адреса. Вона виглядає як www.site.com/wp-admin/ та www.site.com/wp-login.php. Зміна цих адрес не дає можливість навіть почати спробу підбору паролів, оскільки зловмисники не можуть отримати доступ до сторінки, де ці паролі потрібно вводити.

Screenshot_23

Є декілька плагінів, яки допоможуть вам у цьому:
Rename wp-login.php - дозволяє приховати як директорію /wp-admin/ так і сторінку wp-login.php
Hide Login+ – додатково до зазначеного вище дозволяє змінити адреси сторінки "виходу" та "відновлення паролю".
Lockdown WP Admin – аналогічний першому.

Якщо ви забудете, нову адресу для входу, це можна виправити, вимкнувши зазначені плагіни. А зробити це можна, якщо перейменувати директорію з плагіном у /wp-content/plugins/.

Дякую, що приділили увагу моїй статті та безпеці вашого сайту. Як завжди, будемо раді відповісти на Ваші запитання у коментарях, отже не зволікайте можливістю прокоментувати ;)

Захист від підбору паролів. Все зробимо за Вас!

Подивитись умови

Зверніть увагу: ця публікація побачила світ більше року тому, з того часу багато чого могло змінитися ;)
Караваєва Даша
Караваєва Даша
Вчитися, вчитися і ще раз вчитися! Навколо стільки цікавого )

Коментарів 2

Поділіться з друзями.

Ми впевнені, що це може бути корисним для інших і для нашого сайту також )