Похоже, что одним из наиболее распространенных методов обеспечения безопасности в наши дни является перемещение на wp-config.php
один каталог выше, чем корень документа vhost . Я никогда не нашел хорошего объяснения этому, но я предполагаю, что это сводит к минимуму риск того, что вредоносный или зараженный скрипт внутри рута прочитает пароль базы данных.
Но вы все равно должны разрешить WordPress доступ к нему, поэтому вам нужно расширить его, open_basedir
чтобы включить каталог над корнем документа. Разве это не разрушает всю цель, а также потенциально подвергает злоумышленникам журналы сервера, резервные копии и т. Д.?
Или этот метод только пытается предотвратить ситуацию, при которой wp-config.php
любой http://example.com/wp-config.php
, кто запрашивает , будет показан в виде простого текста , а не анализируется механизмом PHP? Это кажется очень редким явлением, и это не перевесит недостатки предоставления журналов / резервных копий / и т. Д. HTTP-запросам.
Может быть, можно переместить его за пределы корня документа в некоторых настройках хостинга, не раскрывая другие файлы, но не в других настройках?
Заключение. После долгих обсуждений по этому вопросу появились два ответа, которые, на мой взгляд, следует считать авторитетными. Аарон Адамс делает хороший аргумент в пользу переноса wp-config, и chrisguitarguy делает хороший аргумент против этого . Это два ответа, которые вы должны прочитать, если вы новичок в ветке и не хотите читать все целиком. Другие ответы либо излишни, либо неточны.
источник
Ответы:
Краткий ответ: да
Ответ на этот вопрос однозначно да , и сказать иначе совершенно безответственно .
Длинный ответ: пример из реальной жизни
Позвольте мне привести очень реальный пример с моего очень реального сервера, где перемещение
wp-config.php
за пределы корневого веб-узла специально предотвращало захват его содержимого .Баг:
Взгляните на это описание ошибки в Plesk (исправлено в 11.0.9 MU # 27):
Звучит безобидно, верно?
Ну, вот что я сделал, чтобы вызвать эту ошибку:
site.staging.server.com
наsite-staging.ssl.server.com
).Когда я сделал это, 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 с помощью следующего кода:(Обязательно измените указанный выше путь к фактическому пути вашего перемещенного
wp-config.php
файла.)Если вы столкнулись с проблемой
open_basedir
, просто добавьте новый путь кopen_basedir
директиве в вашей конфигурации PHP:Это оно!
Разбирая аргументы в обратном
Каждый аргумент против
wp-config.php
выхода за пределы корня сети основывается на ложных предположениях.Аргумент 1: если PHP отключен, он уже
ЛОЖЬ : сценарий, который я описал выше, является результатом неправильной конфигурации, а не вторжения.
Аргумент 2: Случайное отключение PHP является редким и, следовательно, незначительным
ЛОЖЬ : сценарий, который я описал выше, является результатом ошибки в общей части серверного программного обеспечения, влияющей на общую конфигурацию сервера. Это вряд ли «редко» (и, кроме того, безопасность означает беспокойство по поводу редкого сценария).
WTF : смена пароля после вторжения вряд ли поможет, если во время вторжения была обнаружена конфиденциальная информация. Действительно, мы все еще думаем, что WordPress используется только для случайных блогов, а злоумышленники заинтересованы только в порчи? Давайте позаботимся о том, чтобы защитить наш сервер, а не просто восстановить его после того, как кто-нибудь войдет.
Аргумент 3: Отказ в доступе
wp-config.php
достаточно хорошFALSE : Представьте , что ваш сервер по умолчанию для виртуального хоста являются: нет PHP, нет
.htaccess
,allow from all
(вряд ли необычное в производственной среде). Если ваша конфигурация каким-то образом сбрасывается во время обычной операции - например, при обновлении панели - все вернется в состояние по умолчанию, и вы будете выставлены.Если ваша модель безопасности дает сбой, когда параметры случайно сбрасываются до значений по умолчанию, вам нужно больше безопасности.
WTF : Почему кто-то специально рекомендует меньшее количество уровней безопасности? Дорогие машины не просто имеют замки; у них также есть сигнализация, иммобилайзеры и GPS-трекеры. Если что-то стоит защищать, делай это правильно.
Аргумент 4: Несанкционированный доступ
wp-config.php
не имеет большого значенияЛОЖЬ : ключи аутентификации и соли могут быть использованы при любом количестве возможных атак.
WTF : Даже если учетные данные базы данных были единственными
wp-config.php
, вы должны быть напуганы злоумышленником, который заполучит их.Аргумент 5: перемещение
wp-config.php
вне веб-корня фактически делает сервер менее безопаснымЛОЖЬ : Предположим,
wp-config.php
что вhttpdocs/
, просто переместите его../phpdocs/
, и установите,open_basedir
чтобы включить толькоhttpdocs/
иphpdocs/
. Например:(Не забудьте всегда указывать
/tmp/
или свойtmp/
каталог пользователя , если он у вас есть.)Вывод: файлы конфигурации всегда должны всегда находиться вне корневого веб-каталога.
Если вы заботитесь о безопасности, вы выйдете
wp-config.php
за пределы своего веб-корня.источник
wp-config.php
остается безопасным. И это невероятно - настолько, насколько это практически невозможно - ошибка может привести к тому, что корень сети будет произвольно сброшен в тот каталог, в который вы поместили свойwp-config.php
.wp-config.php
в произвольное место. Я добавил указания к своему ответу; это просто включает в себя создание фиктивнойwp-config.php
в каталоге WordPress, ссылающейся на местоположение реальной.Самое главное, что он
wp-config.php
содержит некоторую конфиденциальную информацию: имя пользователя / пароль вашей базы данных и т. Д.Итак, идея: переместить его за пределы корня документа, и вам не о чем беспокоиться. Злоумышленник никогда не сможет получить доступ к этому файлу из внешнего источника.
Но вот в чем проблема: на
wp-config.php
самом деле ничего не выводится на экран. Он определяет только различные константы, которые используются в вашей установке WP. Таким образом, единственный способ увидеть содержимое этого файла - это обойти интерпретатор PHP вашего сервера - он может.php
отобразить файл как простой текст. Если это произойдет, у вас уже есть проблемы: у них есть прямой доступ к вашему серверу (и, возможно, права суперпользователя) и они могут делать все, что захотят.Я собираюсь пойти дальше и сказать, что нет смысла выходить
wp-config
за пределы корня документа с точки зрения безопасности - по причинам, указанным выше, а именно:wp-config
чтобы предотвратить чтение файла любым пользователем без достаточных привилегий, даже если он получает (ограниченный) доступ к вашему серверу через SSH.wp-config.php
принадлежит файл. Что еще более важно, у этого пользователя базы данных есть только права на чтение и запись в базу данных этой установки WP, и ничто иное - нет доступа для предоставления разрешений другим пользователям. То есть, другими словами, если злоумышленник получит доступ к вашей базе данных, это просто вопрос восстановления из резервной копии (см. Пункт 4) и изменения пользователя базы данных.wp-config
, он, вероятно, перепутал что-то еще.wp-config
, и, поскольку вы осторожны с ней (см. Пункты 3 и 4), это не так уж сложно. Соли и тому подобное можно менять в любое время. Единственное, что происходит, это то, что он делает недействительными зарегистрированные файлы cookie пользователей.Мне кажется, что
wp-config
выход из документа пахнет безопасностью из-за неясности - а это очень соломенный человек.источник
Я думаю, что Макс это хорошо осведомленный ответ, и это одна из сторон истории. WordPress Кодекс имеет больше советуют :
Обратите внимание, что установка разрешения 400 или 440 для wp-config.php может помешать плагинам записывать или изменять его. В качестве примера можно привести плагины для кэширования (W3 Total Cache, WP Super Cache и т. Д.). В этом случае я бы выбрал 600 (разрешение по умолчанию для файлов в
/home/user
каталоге).источник
public_html
, перемещениеwp-config.php
вне каталога означает, что он будет находиться вpublic_html
каталоге. В этом случае вам придется использовать правила htaccess, чтобы запретить HTTP-запросы к wp-config.php. (2) Если WordPress установлен непосредственно вpublic_html
каталоге, на один уровень выше>> вы будете перемещать его в/home/user
каталог. В этом случае вы в полной безопасности, так как файл находится за пределами корня документа. Вы все еще можете установить права доступа к файлу 600 (или даже более строгие 440 или 400).Кто-то попросил нас войти, и я отвечу здесь.
Да, есть преимущества безопасности от изоляции вашего 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
Спасибо,
источник
Определенно да.
Когда вы перемещаете wp-config.php за пределы общедоступного каталога, вы защищаете его от чтения с помощью браузера, когда злонамеренный (или случайно!) Обработчик php изменяется.
Считывание логина / пароля вашей БД возможно, если сервер практически не заражен по вине хромого администратора. Начислите штраф на администратора и получите более надежный и надежный сервер. Хотя это может быть дороже.
источник
open_basedir
области действия стоит ?-rwx
доступа к каталогам выше, чемpublic_html
я никогда не был знаком сopen_basedir
. Мои журналы находятся в отдельном каталоге, поэтому резервные копии делают. Я думаю, что это то, что есть у всех общих хостов.Я просто хочу пояснить, ради аргумента, что перемещение вашего файла 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 с помощью:
источник
open_basedir
директива принимает все дерево , поэтому для того , чтобы получить доступ/root/secure
с/root/html
, вы должны установитьopen_basedir
в/root
./root/httpdocs/config/accessible
, гдеhttpdocs
хранятся журналы, резервные копии и т. Д .;config
держитwp-config.php
иaccessible
держит WordPress и весь контент. Вам нужно изменить конфигурацию vhost и т. Д., Чтобы переназначить корень документаaccessible
. Я не вижу никакой выгоды по сравнению с отказом от HTTP-запросов к wp-config в настройках по умолчанию.Существует множество плохо написанных тем и плагинов, которые позволяют атакерам вводить код (вспомните проблему безопасности с Timthumb). Если я буду злоумышленником, зачем мне искать wp-config.php? Просто введите этот код:
Вы можете попытаться скрыть свой wp-config.php. Пока WordPress делает всю важную информацию доступной для всех, скрывать wp-config.php бесполезно.
Плохая часть в wp-config.php не в том, что он содержит конфиденциальные данные. Плохая часть заключается в определении конфиденциальных данных как глобальной доступной константы.
Обновить
Я хочу прояснить проблемы
define()
и почему плохая идея - определять конфиденциальные данные как глобальную константу.Есть много способов атаковать сайт. Внедрение скрипта - это только один из способов атаковать сайт.
Предполагая, что на сервере есть уязвимость, позволяющая злоумышленнику получить доступ к дампу памяти. Атакующий найдет в дампе памяти все значения всех переменных. Если вы определяете глобальную доступную константу, она должна оставаться в памяти до тех пор, пока скрипт не завершится. Создавая переменную вместо константы, есть большая вероятность, что сборщик мусора перезапишет (или освободит) память после того, как переменная больше не нужна.
Лучший способ защитить конфиденциальные данные - удалить их сразу после их использования:
После использования конфиденциальных данных присвоение
null
перезапишет данные в памяти. Злоумышленник должен получить дамп памяти как раз в тот момент, когда$db_con
содержит конфиденциальные данные. И это очень короткое время в приведенном выше примере (если класс Database_Handler не сохраняет его копию).источник
Помимо преимуществ безопасности, он также позволяет вам держать ваш экземпляр WordPress под контролем версий, сохраняя при этом основные файлы WordPress как субмодуль / внешний. Вот как Марк Джакит настроил свой проект WordPress-Skeleton. См. Https://github.com/markjaquith/WordPress-Skeleton#assumptions для получения подробной информации.
источник
wp-config.php
один каталог над корнем документа vhost , а не один каталог над установочной папкой WordPress. Весь смысл в том, чтобы вытащить его из папки, которую можно прочитать по HTTP-запросам.