Коротка відповідь: так
Відповідь на це питання - це однозначно , а сказати інакше - абсолютно безвідповідально .
Довга відповідь: приклад у реальному світі
Дозвольте надати дуже реальний приклад із мого дуже реального сервера, коли переміщення wp-config.php
за межі веб-корінця спеціально не дозволило захопити його вміст .
Помилка:
Подивіться на цей опис помилки в Плеську (зафіксовано в 11.0.9 MU № 27):
Plesk скидає переадресацію субдомену після синхронізації підписки з планом хостингу (117199)
Звучить нешкідливо, правда?
Ну ось, що я зробив, щоб викликати цю помилку:
- Налаштуйте субдомен для переадресації на іншу URL-адресу (наприклад,
site.staging.server.com
на site-staging.ssl.server.com
).
- Змінено план обслуговування підписки (наприклад, її конфігурацію PHP).
Коли я це зробив, Plesk скинув піддомен до значень за замовчуванням: розміщення вмісту ~/httpdocs/
, без активних перекладачів (наприклад, PHP).
І я не помітив. Тижнями.
Результат:
- У
wp-config.php
веб-кореневій системі запит /wp-config.php
завантажив файл конфігурації WordPress.
- За
wp-config.php
межами веб-корінця, запит на /wp-config.php
завантаження абсолютно нешкідливого файлу. Неможливо завантажити реальний wp-config.php
файл.
Таким чином, очевидно, що переміщення wp-config.php
за межі веб-корінця має добросовісну перевагу безпеки в реальному світі .
Як перейти wp-config.php
до будь-якого місця на вашому сервері
WordPress автоматично шукатиме один каталог над вашою установкою WordPress для вашого wp-config.php
файлу, тож якщо ви його перемістили, ви закінчили!
Але що робити, якщо ви перенесли його кудись ще? Легко. Створіть новий wp-config.php
у каталозі WordPress із таким кодом:
<?php
/** Absolute path to the WordPress directory. */
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');
/** Location of your WordPress configuration. */
require_once(ABSPATH . '../phpdocs/wp-config.php');
(Не забудьте змінити вищевказаний шлях на фактичний шлях вашого переміщеного wp-config.php
файлу.)
Якщо у вас виникли проблеми open_basedir
, просто додайте новий шлях до open_basedir
директиви у вашій конфігурації PHP:
open_basedir = "/var/www/vhosts/example.com/httpdocs/;/var/www/vhosts/example.com/phpdocs/;/tmp/"
Це воно!
Підбираючи окремі аргументи протилежного
Кожен аргумент проти переміщення wp-config.php
за межі кореневого веб-сайту залежить від помилкових припущень.
Аргумент 1: Якщо PHP вимкнено, вони вже є
Єдиний спосіб, коли хтось побачить цей вміст [ wp-config.php
], якщо вони обійдуть PHP-інтерпретатор ваших серверів ... Якщо це станеться, у вас вже виникають проблеми: у них є прямий доступ до вашого сервера.
ФАЛЬСА : Я описаний вище сценарій є результатом неправильної конфігурації, а не вторгнення.
Аргумент 2: Випадкове відключення PHP є рідкісним, а тому незначним
Якщо у зловмисника є достатній доступ, щоб змінити обробник PHP, ви вже пришпилені. Випадкові зміни в моєму досвіді дуже рідкісні, і в цьому випадку пароль буде легко змінити.
FALSE : Сценарій, який я описав вище, є результатом помилки у загальній частині серверного програмного забезпечення, що впливає на загальну конфігурацію сервера. Це навряд чи є "рідкісним" (і до того ж безпека означає турбуватися про рідкісний сценарій).
WTF : Зміна пароля після вторгнення навряд чи допоможе, якщо під час вторгнення було зібрано конфіденційну інформацію. Дійсно, чи ми все ще думаємо, що WordPress використовується лише для випадкового ведення блогів, і що зловмисників цікавить лише деграментація? Давайте потурбуємося про захист нашого сервера, а не просто відновлення його після того, як хтось заходить.
Аргумент 3: Заборона доступу до wp-config.php
нього досить хороша
Ви можете обмежити доступ до файлу через конфігурацію віртуального хоста або
.htaccess
- фактично обмежити зовнішній доступ до файлу таким же чином, як і переміщення за межами кореня документа.
ФАЛЬС : Уявіть, що за замовчуванням вашого сервера для віртуального хоста є: ні PHP, ні .htaccess
, allow from all
(навряд чи незвично у виробничих умовах). Якщо ваша конфігурація якимось чином скидається під час звичайної операції - як, скажімо, оновлення панелі - все повернеться до стану за замовчуванням, і ви виявитесь.
Якщо ваша модель безпеки виходить з ладу, коли налаштування випадково скинуті до значень за замовчуванням, вам потрібен додатковий захист.
WTF : Чому хтось конкретно рекомендує менше шарів безпеки? У дорогих автомобілів немає просто замків; у них також є сигналізатори, іммобілайзери та GPS-трекери. Якщо щось варто захистити, зробіть це правильно.
Аргумент 4: Несанкціонований доступ до wp-config.php
них не є великою справою
Інформація про базу даних насправді є єдиним чутливим матеріалом у [ wp-config.php
].
НЕМАЛЬНІСТЬ : Ключі аутентифікації та солі можуть використовуватися в будь-якій кількості можливих атак викрадення.
WTF : Навіть якщо дані про базу даних були єдиним wp-config.php
, ви повинні злякатися від зловмисників, що їх отримують.
Аргумент 5: переміщення wp-config.php
за межі веб-корінця фактично робить сервер менш захищеним
Ви все ще повинні дозволити WordPress отримати доступ до [ wp-config.php
], тому вам потрібно розгорнути, open_basedir
щоб включити каталог над коренем документа.
ФАЛЬСЬКА : Припустимо, що ви wp-config.php
перебуваєте httpdocs/
, просто перемістіть її до ../phpdocs/
та встановіть, open_basedir
що вона включає лише httpdocs/
та phpdocs/
. Наприклад:
open_basedir = "/var/www/vhosts/example.com/httpdocs/;/var/www/vhosts/example.com/phpdocs/;/tmp/"
(Не забудьте завжди включати /tmp/
або свій tmp/
каталог користувачів , якщо у вас є.)
Висновок: файли конфігурації завжди завжди повинні знаходитись поза межами кореня веб-сторінок
Якщо ви дбаєте про безпеку, ви перейдете wp-config.php
за межі веб-корінця.