Чи дійсно вигідне переміщення wp-config поза веб-корінцем?


135

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

Але ви все ще повинні дозволити WordPress отримати доступ до нього, тому вам потрібно розгорнути, open_basedirщоб включити каталог над коренем документа. Хіба це не просто перемагає всю мету, а також потенційно викриває зловмисники журнали, резервні копії тощо?

Або ця техніка лише намагається запобігти ситуації, коли wp-config.phpвона відображатиметься як звичайний текст для кожного, хто запитує http://example.com/wp-config.php, замість того, щоб розбирати двигун PHP? Це здається дуже рідкісним випадком, і це не переважає недоліки викриття журналів / резервних копій / тощо для HTTP-запитів.

Можливо, можливо перемістити його за межами кореня документа в деяких установках хостингу, не виставляючи інших файлів, але не в інших налаштуваннях?


Висновок: Після численних результатів у цьому питанні з'явилися дві відповіді, які, на мою думку, слід вважати авторитетними. Аарон Адамс робить хороший випадок на користь переміщення wp-config, і chrisguitarguy робить хороший випадок проти цього . Це два відповіді, які ви повинні прочитати, якщо ви новачок у потоці і не хочете прочитати всю справу. Інші відповіді або є зайвими, або неточними.


Дійсно не потрібно підключати свій вибір відповідей та відхиляти всі інші відповіді всередині вашого питання. Як ви бачите нижче, саме для цього складається система голосування стакштекс, щоб проголосувати відповіді, які мають сенс для людей, тоді як запитуючі запитання повинні використовувати механізм «прийнята відповідь» та ваші власні голоси вгору / вниз.
Kzqai

6
Я не роблю цього для 99% запитань, але я вважав, що це доречно в цьому конкретному випадку. Є 8 відповідей на питання, деякі з яких досить тривалі / складні, а деякі з них мають багато результатів, незважаючи на те, що містять неточну інформацію або нічого не додають до розмови. Я думаю, що пропонувати напів авторитетний висновок корисно для людей, які читають нитку вперше. Як завжди, читачі вільні скласти власну думку; Я просто пропоную свою думку як ОП.
Ян Данн

1
@Kzqai: "Система голосування за стакесом" - це демократичний процес, і учасникам часто 1) незрозуміло, що насправді запитує або намагається вирішити ОП, і 2) не розуміючи достовірності будь-якої конкретної відповіді. Після того, як відповіді пролунали і були подані голоси, ОП більш ніж корисно роз'яснити відповіді, які надали допомогу. Зрештою, ОП - це єдиний, хто знає, і я хотів би, щоб це зробили більше ОП. Так, люди "голосують за відповіді, які мають сенс для людей", але нехай ОП має останнє слово щодо того, що має для нього сенс.
Мак

Відповіді:


127

Коротка відповідь: так

Відповідь на це питання - це однозначно , а сказати інакше - абсолютно безвідповідально .


Довга відповідь: приклад у реальному світі

Дозвольте надати дуже реальний приклад із мого дуже реального сервера, коли переміщення wp-config.phpза межі веб-корінця спеціально не дозволило захопити його вміст .

Помилка:

Подивіться на цей опис помилки в Плеську (зафіксовано в 11.0.9 MU № 27):

Plesk скидає переадресацію субдомену після синхронізації підписки з планом хостингу (117199)

Звучить нешкідливо, правда?

Ну ось, що я зробив, щоб викликати цю помилку:

  1. Налаштуйте субдомен для переадресації на іншу URL-адресу (наприклад, site.staging.server.comна site-staging.ssl.server.com).
  2. Змінено план обслуговування підписки (наприклад, її конфігурацію 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за межі веб-корінця.


1
Якщо у вас є помилка в апачі, linux чи мозку адміністратора, ви в будь-якому випадку є тостом. У вашому сценарії ви не можете пояснити, чому більш ймовірно, що неправильна конфігурація стане в корені веб-сайту, а потім у будь-якому іншому місці на сервері. Неправильно налаштований апаш може, ймовірно, отримати доступ до /../config.php так просто, як /config.php
Марк Каплун

1
Ви не "тости в будь-якому випадку". Це дуже ймовірно , і навіть можна довести , що помилка призведе до того, що веб-корінь буде скинутий до свого замовчування, і в цьому випадку ви не "тостуєте" - ваші wp-config.phpзалишаються в безпеці. І це надзвичайно малоймовірно - настільки, що по суті бути неможливо - що помилка призведе до того, що веб-корінь буде довільно скинутись до точного каталогу, у якому ви розмістили свій wp-config.php.
Аарон Адамс

1
@IanDunn Насправді, легко переміститись wp-config.phpу довільне місце. Я додав вказівки до своєї відповіді; воно просто включає створення манекена wp-config.phpв каталозі WordPress, що посилається на розташування реального.
Аарон Адамс

3
Ця відповідь є точковою. У моєї веб-хостингової компанії сталася помилка масиву накопичувачів. Коли все було сказано і зроблено, вони відновили систему ЧАСТИНО. Виявляється, вони використовували серію скриптів cPanel / WHM для відновлення файлів httpd.conf, які зробили це неправильно. На щастя, у мене вже був wp-config.php поза корінком doc, але якщо я не мав вмісту, він би там взявся. Так рідко, але як зазначалося, рідкісні випадки - це те, про що потрібно хвилюватися. Крім того, заявляючи, що "простодушні люди будуть втрачені" є поганим приводом для меншої безпеки.
Ленс Клівленд

1
Це хороший момент, Аарон. Я все ще трохи скептично ставлюсь до причин, про які я згадував у цій та іншій темі коментарів, але ви переконали мене, що це має більше заслуг, ніж я спочатку думав. Принаймні, якщо це зробити правильно, я не думаю, що це щось зашкодить. У мене все ще виникає проблема з тим, що більшість людей, які його рекламують, схоже, не розуміють причин цього, і те, як вони навчають, часто призводить до того, що каталог, що знаходиться вище httpdocs, не піддається, але ви допомогли вирішити ці проблеми в Ваша відповідь.
Ян Данн

40

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

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

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

Я збираюся йти вперед і скажу, що переходити wp-configза межі кореня документа з точки зору безпеки немає користі - з причин, зазначених вище, і таких:

  1. Ви можете обмежити доступ до файлу через ваш віртуальний конфігураційний хост або .htaccess - ефективно обмежуючи зовнішній доступ до файлу так само, як і переміщення за межами кореня документа
  2. Ви можете переконатися, що в дозволах на файли суворо wp-configдотримуватися, щоб не допустити будь-якого користувача без достатніх привілеїв читати файл, навіть якщо він отримує (обмежений) доступ до вашого сервера через SSH.
  3. Ваша конфіденційна інформація, налаштування бази даних, використовується лише на одному веб-сайті. Тож навіть якщо зловмисник отримав доступ до цієї інформації, єдиним сайтом, на який це вплине, була б установка WordPress, до якої wp-config.phpналежить файл. Що ще важливіше, що користувач бази даних має лише права на читання та запис у базу даних цієї установки WP, і нічого іншого - немає доступу для надання дозволів іншим користувачам. Іншими словами, якщо зловмисник отримує доступ до вашої бази даних, це просто питання відновлення з резервної копії (див. Пункт 4) та зміни користувача бази даних
  4. Ви створюєте резервну копію часто. Часто є відносним терміном: якщо ви публікуєте 20 статей щодня, краще створюйте резервні копії щодня або кожні кілька днів. Якщо ви публікуєте раз на тиждень, резервне копіювання один раз на тиждень, ймовірно, достатньо.
  5. У вас веб-сайт знаходиться під контролем версій ( наприклад, це ), що означає, що навіть якщо зловмисник отримав доступ, ви зможете легко виявити зміни коду та повернути їх назад. Якщо зловмисник має доступ до нього wp-config, він, ймовірно, зіпсував щось інше.
  6. Інформація про базу даних насправді є єдиною чутливою інформацією wp-config, і тому що ви обережно ставитесь до них (див. Пункти 3 та 4), це не велика справа. Солі і таке можна змінити будь-коли. Єдине, що трапляється, це те, що він визнає недійсним файли cookie користувачів.

Для мене wp-configвиїзд з документа корінь охороняє безпеку через невідомість - що дуже сильна людина.


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

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

4
Просто для розблокування можливого міфу - це не можливо, щось може піти не так на сторону сервера - у такому випадку на екран виводиться php-код?
Стівен Харріс

3
@IanDunn Але найкращі відповіді пропонують перенести його з цієї ієрархії взагалі в окремий, який стосується вашої турботи щодо журналів і т.д. інші заходи безпеки вигідні і намагаються запевнити вас не турбуватися про безпеку. Всі думають, що їх будинок захищений, поки їх не пограбують. Після цього вони роблять кращу роботу. Деякі люди ніколи не втручаються, навіть якщо їхня безпека низька, але це не означає, що це хороша порада мати менший рівень безпеки.
AndrewC

4
Це хороші моменти, але моя найбільша проблема в тому, що вони виправляють аргументи, а не превентивні аргументи. Більшість з них говорять про те, як це не велика угода, тому що A) ви припускаєте, що хтось правильно обробляв користувача DB, і B) у вас є резервні копії. Що трапляється, коли ви використовуєте щось, як вуокомерція або зберігаєте конфіденційну інформацію у своїй базі даних? Тоді тебе накрутили.
Goldentoa11

25

Я думаю, що відповідь Макса - це знана відповідь, і це одна сторона історії. У WordPress Codex є більше поради :

Також переконайтесь, що цей файл можуть читати лише ви (і веб-сервер) (це загалом означає дозвіл 400 або 440).

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

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

Зауважте, що встановлення дозволу 400 або 440 на wp-config.php може перешкоджати написанню плагінів або їх зміні. Наприклад, справжнім випадком буде кешування плагінів (W3 Total Cache, WP Super Cache тощо). У такому випадку я б пішов з 600 (дозвіл за замовчуванням для файлів у /home/userкаталозі).


5
Макс - це відповідь. +1 до нього. Я просто намагаюся розширити це.
its_me

1
Аахан Криш, ти вдарив бику в очі. Дякую за доповнення
Макс Юдін

Отже, якщо ви використовуєте htaccess для відмови HTTP-запитів до wp-config.php, чи не це досягає такого ж результату, як переміщення його за межами кореня документа, але без викриття журналів / резервних копій / тощо?
Ян Данн

4
@IanDunn Залежить від того, що таке корінь документа - (1) Якщо wordpress розміщується в каталозі в public_html, переміщення wp-config.phpза межі каталогу означає, що воно буде в public_htmlкаталозі. У цьому випадку вам доведеться використовувати правила htaccess для відмови HTTP-запитів на wp-config.php. (2) Якщо WordPress встановлений безпосередньо під public_htmlкаталогом, на один рівень вгору => ви будете переміщувати його в /home/userкаталог. У цьому випадку ви досить безпечні, оскільки файл знаходиться поза коренем документа. Ви все ще можете встановити дозволи для файлу на 600 (або навіть суворіші 440 або 400).
its_me

@IanDunn Як я вже говорив, це моє основне розуміння, і я не є експертом з питань безпеки. :)
its_me

17

Хтось попросив нас світити, і я відповім тут.

Так, є переваги безпеки від ізоляції вашого wp-config.php від кореневого каталогу вашого сайту.

1- Якщо ваш PHP-обробник порушений або модифікований якимось чином, інформація про ваші БД не буде викрита. І так, я бачив це кілька разів на спільних хостах під час оновлень сервера. Так, сайт буде порушено протягом цього періоду, але ваші паролі будуть недоторканими.

2- Найкращі практики завжди рекомендують ізолювати файли конфігурації з файлів даних. Так, це важко зробити за допомогою WordPress (або будь-якого веб-додатку), але переміщення вгору робить трохи ізоляції.

3- Запам’ятайте вразливість PHP-CGI, де кожен міг передати? -S у файл та переглянути джерело. http://www.kb.cert.org/vuls/id/520827

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

Але не дозволяйте невеликим відволіканням (передчасним оптимізаціям) передувати те, що дійсно необхідно для належного захисту сайту:

1- Постійно оновлюйте його

2- Використовуйте надійні паролі

3- Обмежити доступ (через дозволи). У нас є пост про це тут:

http://blog.sucuri.net/2012/08/wordpress-security-cutting-through-the-bs.html

Дякую,


Гей, хлопці, дякую, що додали свої думки. Я думаю, ми вже звертаємось до більшості цих пунктів в інших відповідях та їх коментарях. 1) Так, це можливо, але рідко; 2) Так, це має переваги, але вони мінімальні; 3) Так, це можливо, але такий тип вразливості навряд чи повториться, і захист від нього схожий на те, що грати в whac-a-mole або змушувати людей знімати взуття в аеропортах, тому що якийсь шахрай сховав бомбу в своєму взуття один раз. Це реакційна реакція і навряд чи матиме майбутні вигоди.
Ян Данн

У різних дискусіях питання було уточнено із "Чи є користь?" до "Добре, є якісь переваги, але вони переважають ризики?" Основний ризик, на який я маю на увазі, полягає в тому, що вам потрібно розширити область openbase_dir, щоб дозволити скриптам доступу до PHP виходити за межі веб-кореня. Багато налаштувань хостингу, включаючи ті, що використовують Plesk, а це багато - зберігають журнали, резервні копії, приватні області FTP, які повинні бути ізольовані від веб-корінця тощо в каталозі над веб-корінцем. Отже, надання PHP доступу до цього каталогу може бути серйозною вразливістю.
Ян Данн

15

Однозначно ТАК.

При переміщенні wp-config.php за межами публічного каталогу ви захищаєте його від читання за допомогою браузера, коли php обробник зловмисно (або випадково!) Змінений.

Читання Вашого логіну / пароля БД можливо, коли сервер навряд чи заражений з вини кульгавого адміністратора. Стягніть адміністратора штрафу і отримайте більш доглянутого та надійного хоста сервера. Хоча це може бути дорожче.


4
Якщо у зловмисника є достатній доступ, щоб змінити обробник PHP, ви вже пришпилені. Випадкові зміни в моєму досвіді дуже рідкісні, і в цьому випадку пароль буде легко змінити. Зважаючи на ці речі, ви все ще вважаєте, що варто розкривати журнали / резервні копії / тощо через розширений open_basedirобсяг?
Ян Данн

1
Я ніколи не мав -rwxдоступу до каталогів вище, public_htmlтому я ніколи не був знайомий open_basedir. Мої журнали знаходяться в окремому каталозі, так це роблять резервні копії. Я думаю, що це всі спільні хости.
Макс Юдін

Хости різко різняться; немає стандартної структури каталогів. Plesk (одна з найпопулярніших панелей керування для спільних хостів) розміщує журнали у /var/www/vhosts/example.com/statistics/logs, а корінь документа - /var/www/vhosts/example.com/httpdocs. Переміщення wp-config.php до /var/www/vhosts/example.com/wp-config.php вимагатиме надання скриптам доступу до всього каталогу example.com.
Ян Данн

Щойно з цікавості, де зберігаються ваші журнали та резервні копії, якщо не в каталозі домену? До них можна отримати доступ через панель керування чи щось таке?
Ян Данн

1
Так, через панель управління.
Макс Юдін

8

Я просто хочу уточнити, для аргументу, що переміщення файлу wp_config.php не обов'язково означає, що вам потрібно перемістити його лише до батьківського каталогу. Скажімо, у вас є така структура, як / root / html, де html містить установку WP та весь ваш HTML-вміст. Замість переміщення wp_config.php в / root, ви можете перемістити його на щось на кшталт / root / secure ..., що знаходиться поза каталогом html, а також не в кореневому каталозі сервера. Звичайно, вам потрібно переконатися, що php може працювати і в цій безпечній папці.

Оскільки WP не може бути налаштовано на пошук wp_config.php в папці братів, таких як / root / secure, вам доведеться зробити додатковий крок. Я залишив wp_config.php в / root / html і вирізав чутливі частини (логін бази даних, сіль, префікс таблиці) і перемістив їх до окремого файлу під назвою config.php. Потім ви додаєте команду PHP includeдо свого wp_config.php, наприклад:include('/home/content/path/to/root/secure/config.php');

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

Крім того, ви можете обмежити доступ до захищеної папки, створивши там файл .htaccess за допомогою:

order deny,allow
deny from all
allow from 127.0.0.1

Привіт Майкл, дякую за те, що поділився цим. Ви випробували це в реальному середовищі, щоб перевірити, чи працює він? Я думаю , що open_basedirдиректива приймає все дерево , тому для того , щоб отримати доступ /root/secureдо /root/html, ви повинні встановити open_basedirв /root.
Ian Dunn

Для того, щоб ваша ідея спрацювала, я думаю, вам знадобиться встановити структуру каталогів, наприклад /root/httpdocs/config/accessible, де httpdocsзберігаються журнали, резервні копії тощо; configвміщує wp-config.phpта accessibleвміщує WordPress та весь вміст. Вам доведеться змінити конфігурацію vhost тощо, щоб перезавантажити корінь документа accessible. Я не бачу жодної вигоди в тому, щоб просто відмовити HTTP-запити на wp-config у налаштуваннях за замовчуванням.
Ian Dunn

1
Відповідно до php.net/manual/en/ini.core.php#ini.open-basedir : "У Windows розділіть каталоги крапкою з комою. На всіх інших системах розділіть каталоги двокрапкою. Як модуль Apache, Шляхи open_basedir з батьківських каталогів тепер автоматично успадковуються. " Таким чином, ви можете встановити кілька каталогів, не потрібно, щоб вони знаходилися в одному дереві.
Майкл

Я щойно це перевірив і, схоже, ти маєш рацію. Я все ще не впевнений, яку перевагу для безпеки це має над простою забороною доступу до файлу через Apache.
Іван Данн

@IanDunn добре звернувся у відповіді Аарона Адамса
AndrewC

4

Існує багато поганих письмових тем і плагінів, які дозволяють атакуючим вводити код (пам’ятайте, питання безпеки з Timthumb). Якщо я став би зловмисником, навіщо мені шукати wp-config.php? Просто введіть цей код:

var_dump( DB_NAME, DB_USER, DB_PASSWORD );

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

Погана частина wp-config.php полягає не в тому, що він містить чутливі дані. Погана частина - визначити чутливі дані як глобальну доступну константу.

Оновлення

Я хочу прояснити проблеми, define()і чому погана ідея визначати конфіденційні дані як глобальну константу.

Існує маса способів атаки на веб-сайт. Введення сценарію - лише один із способів атакувати веб-сайт.

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

Кращий спосіб захисту конфіденційних даних - це видалення їх відразу після їх використання:

$db_con = new stdClass();
$db_con->db_user = 'username';
$db_con->password = 'password';
$db_con->host = 'localhost';

$db_handler = new Database_Handler( $db_con );

$db_con = null;

Після використання конфіденційних даних присвоєння nullперезаписує дані в пам'яті. Зловмиснику доводиться отримувати дамп пам'яті саме в той момент, коли він $db_conмістить конфіденційні дані. І це дуже короткий час у наведеному вище прикладі (якщо клас Database_Handler не збереже його копію).


Ця відповідь безпосередньо не стосується питання. Будь-який автор плагінів може мати день роботи з WordPress, якщо він переконає вас встановити їх код та має зловмисні наміри. Це не чим іншим, як охоче встановити вірус у вашій системі. Цей аргумент щодо переміщення wp-config.php є безглуздим. Це як би сказати, що навмисне встановлення автомобільної бомби у вашому автомобілі робить налаштування автосигналізації марною. Технічно правда, але WTF?!?
Ленс Клівленд

2
Ні, це безглуздо. Питання: Чи можу я захистити обліковий запис бази даних, приховавши wp-config.php. І відповідь однозначна: Ні. Це те саме, що якщо ви запитаєте "Чи можна захистити свій автомобіль від автомобільних бомб автомобільною сигналізацією?" Немає жодної іншої переваги, приховуючи свій wp-config як захист доступу до бази даних або доступу до ftp. Обидва є в глобальному масштабі. Я впевнений, що для зловмисників існує більше способів отримати доступ до глобальних змін без введення коду.
Ralf912

Я не бачу "чи можу я захистити обліковий запис бази даних, приховавши wp-config.php" у вихідному запитанні. Первісне питання було "чи має сенс переміщувати wp-config.php". Відповідь абсолютно так, ІМО. Це як запитати, чи варто замикати вхідні двері, коли ви виходите. Говорячи, що "хтось легко може зламати вікно і все одно потрапити, так чому б це турбувати", не відповідає принциповому моменту питання. IMO запитання було таке: "Чи варто докладати додаткових зусиль для переміщення wp-config.php? ЯКЩО користь робити це?". Так. По крайней мере, це утримує ледачих хакерів.
Ленс Клівленд

2
Один із найпоширеніших найкращих практик безпеки ... Ви пропустили дуже (дуже, дуже) важливий момент: до чого цікавий нападник? І це не так, як ви створили свій wp-config.php. Зловмисник має інтерес у значеннях, визначених у вашому wp-config. Захоплення вашого прикладу вхідними дверима: приховувати свій wp-config так само, як якщо б ви заблокували вхідні двері, але зберігали все своє золото незахищеним у саду. Всі значення, визначені в wp-config, визначені глобально . Тому всі вони доступні за межами wp-config. Навіть якщо ви ховаєте свій wp-config, значення все ще є.
Ralf912

1
Я думаю, що ті, хто заперечує на користь його переміщення, намагаються захистити від сценаріїв, де wp-config.php може відображатися у простому тексті через HTTP-запит, а не сценарії, де він може бути підданий дії іншого коду PHP, що працює на хості.
Ян Данн

-1

Крім переваг для безпеки, він також дозволяє тримати ваш примірник WordPress під контролем версій, зберігаючи основні файли WordPress як підмодуль / зовнішній. Ось так Марк Джакіт створив свій проект WordPress-Skeleton. Докладніше дивіться на https://github.com/markjaquith/WordPress-Skeleton#assumptions .


8
Він має налаштування в корені документа, а не поза ним, тому це питання не має відношення. Методика, про яку задається питання, вказує на те, що ви переміщуєте wp-config.phpодну директорію над корінцем документа vhost , а не лише один каталог над інсталяційною папкою WordPress. Вся справа в тому, щоб вивести його за межі папки, яку можна прочитати за запитами HTTP.
Ян Данн
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.