BLACK П'ятниця :) Хостинг на неймовірних умовах до 30/11!
Знижка від 300 до 500грн!
 

автор Дмитро Кондрюк

23.02.2010

0

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

Безпечний блог на WordPress – порадиСьогодні я продовжу роздавати поради щодо збереження вашого блогу у безпеці :). Перша частина була опублікована декілька днів тому і включала наступні поради:

  • Установіть WordPress безпечно
  • Префікс таблиць
  • Унікальні ключі ідентифікації
  • Права на доступ до файлів та директорій
  • Перейменуйте wp-content

Ці досить прості кроки допоможуть значно покращити безпеку Вашого блогу.
Отже продовжимо.

Безпечний доступ

Починаючи з версії 2.6, стала доступна нова опція для захисту панелі адміністратора: доступ через SSL – Secure Sockets Layer це зашифрований протокол для передачі даних. Зазвичай Ваш інтернет провайдер має підтримувати роботу через SSL. Отже, якщо так воно і є, Ви можете включити цю опцію у wp-config.php . Для використання можливостей SSL у Вашій адмінці, Вам потрібно поставити параметру FORCE_SSL_LOGIN значення TRUE. Від цього моменту уся інформація у адмін-панелі буде шифруватися.

define ('FORCE_SSL_LOGIN', true);

Збереження безпеки існуючої інсталяції

Вже існуючі блоги можуть бути більш захищені завдяки декільком простим крокам. Якщо блог вже працює і у базі даних вже зберігається інформація, проста зміна префіксу таблиць буде мати фатальний ефект. Не дивлячись на це, все ж є можливість змінити префікси. Для цього виконайте наступні декілька кроків.
Нагадаємо, що перед будь-якими змінами у базі даних НЕОБХІДНО ЗРОБИТИ РЕЗЕРВНУ КОПІЮ!
Для зміни імен усіх таблиць wordpress виконайте наступний SQL скрипт. Якщо у Вас більше таблиць, наприклад таблиці плагінів, їм також треба змінити ім’я. Змініть наведений у скрипті для прикладу префікс wp_prefix_ за Вашим бажанням.

RENAME TABLE wp_comments to wp_prefix_comments;
RENAME TABLE wp_links to wp_prefix_links;
RENAME TABLE wp_options to wp_prefix_options;
RENAME TABLE wp_postmeta to wp_prefix_postmeta;
RENAME TABLE wp_posts to wp_prefix_posts;
RENAME TABLE wp_terms to wp_prefix_terms;
RENAME TABLE wp_term_relationships to wp_prefix_term_relationships;
RENAME TABLE wp_term_taxonomy to wp_prefix_term_taxonomy;
RENAME TABLE wp_usermeta to wp_prefix_usermeta;
RENAME TABLE wp_users to wp_prefix_users;

Але WordPress використовує ще префікс для чіткої ідентифікації декількох полів у таблицях options та usermeta. Отже, Ви маєте змінити ці поля.

UPDATE wp_prefix_options SET option_name = REPLACE(option_name, 'wp_', 'wp_prefix_');
UPDATE wp_prefix_usermeta SET meta_key = REPLACE(meta_key, 'wp_', 'wp_prefix_');

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

SELECT * FROM wp_prefix_options WHERE option_name LIKE 'wp_%';
SELECT * FROM wp_prefix_usermeta WHERE meta_key LIKE 'wp_%';

Змініть логін

При стандартній інсталяції ім’я адміністратора – admin, і це відомо не тільки нам з Вами. Після встановлення WordPress Вам потрібно видалити цього користувача. Але не забудьте створити нового адміністратора! Це можна зробити в панелі адміністрування і має бути першим, що Ви зробите після встановлення блогу!

Це змінить логін, а також ідентифікатор ID користувача, який після інсталяції був 1. Це два значення, які роблять хакерам легшим несанкційований доступ, якщо їх не змінити.

Можливо, Ви бажаєте встановити якесь дуже велике значення ID. Створюючи користувача у панелі адміністрування WordPress додає до кожного нового ID лише 1. Альтернативою є зміна цього значення засобами SQL або за допомогою плагіну Search & Replace.

UPDATE `wp_users` SET `ID` = '815' WHERE `wp_users`.`ID` = 1;
UPDATE `wp_usermeta` SET `user_id` = '815' WHERE `wp_usermeta`.`user_id` = 1;
UPDATE `wp_posts` SET `post_author` = '815' WHERE `wp_posts`.`post_author` = 1;
UPDATE `wp_links` SET `link_owner` = '815' WHERE `wp_links`.`link_owner` = 1;

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

Не показуйте версію WordPress

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

Через це, ніхто не має отримувати інформацію щодо версії WordPress, встановленої у Вас. Найпростіший шлях вилучити інформацію про версію звідусіль (окрім адмін панелі) є використання плагіну Secure WordPress (Я вже писав про цей плагін, а також викладав його українську версію). Альтернативою є відключення (перевизначення, підміна) функції, що виводить цю інформацію. Додайте у файл functions.php:

add_filter( 'the_generator', create_function('$a', "return null;") );

Відключіть відображення помилок та інформаційні повідомлення

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

Отже Ви маєте вирішити, чи потрібні Вам ці повідомлення. Якщо бажаєте їх відключити, можете скористатися вже описаним плагіном Secure WordPress.

Якщо константа WP-DEBUG визначена у Вашому wp-config.php, Ви маєте встановити їй значення FALSE або видалити, інакше будь-які помилки WordPress-у будуть показуватись у браузері. Ця константа має використовуватись лише у процесі розробки.

define('WP_DEBUG', false);

Безпека за допомогою .htaccess

Можливості .htaccess дуже великі та різноманітні, отже ми можемо скористатися ними аби покращити безпеку у WordPress. Але потрібно гарно продумати усі обмеження, описані нижче, оскільки не рідко налаштування безпеки шкодять “юзабільності” блогу (зручності у використанні).

В принципі, будь яка директорія може бути захищена, а особливо має бути під захистом wp-admin, оскільки у ній дуже багато файлів, через які можна отримати доступ до Вашої адмін-панелі. Доступ контролюється файлом wp-login.php і WordPress завжди перенаправляє до нього при будь-якому неавторизованому виклику у wp-admin. Аби захистити wp-admin, потрібно додати файл .htpasswd, що містить інформацію про ім’я користувача та пароль. Різноманітні онлайн-генератори зможуть допомогти Вам у цьому. Потім додайте наступний код у .htaccess

# protect wp-login.php
<files wp-login.php>
AuthName "Admin-Панель"
AuthType Basic
AuthUserFile /your_local_path/.htpasswd
require valid-user
</files>

Файл wp-config.php містить інформацію про доступ до бази даних, тому цей файл особливо заслуговує на захист. Кілька строк у .htaccess допоможуть у цьому.

# protect wp-config.php
<files wp-config.php>
Order deny,allow
deny from all
</files>

Якщо налаштування серверу дозволяють перегляд вмісту директорій, було б правильним створити у кожній пустий index.html або блокувати доступ через параметр “Options Indexes” у файлі .htaccess.

Папки wp-content та wp-includes також потребують захисту. Наступний код трохи допоможе Вам у цьому, закривши доступ до деяких типів файлів, що у них знаходяться:

Order Allow,Deny
Deny from all
<files ~ "js/tinymce/*.$">
Allow from all
</files>
<files ~ ".(css|jpe?g|png|gif|js)$">
Allow from all
</files>

Змініть цей код згідно Вашим вимогам. Альтернативою є використання плагіну, який чудово допоможе покращити безпеку та зменшить ручну роботу: AskApache Password Protect.

Висновки

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

Дмитро Кондрюк

Автор публікації Дмитро Кондрюк

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

Є що відповісти?

Ваш email не буде публікуватися

Можна скористатися такими тегами в тексті:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>