Почему размещение фреймворка под открытым корнем более безопасно?

Почему всегда рекомендуется размещать файлы фреймворка вне публичного корня?

Учитывая, что иногда в фреймворке нет файлов .ini или .inc которые могут быть открыты браузером.

Related of "Почему размещение фреймворка под открытым корнем более безопасно?"

Ну, безусловно, нет ничего, что можно было бы получить от размещения исходных текстов в корневом каталоге. Поскольку выбор места для размещения файла является бесплатным, логично следовать принципу наименьших привилегий : вам не нужен веб-доступ к этим файлам, поэтому вы его не получите.

Более конкретная причина заключается в том, что базовые источники могут легко раскрывать бренд и версию структуры, используемой на веб-сайте (хотя эту информацию также можно получить, исследуя сгенерированный контент); это, в свою очередь, облегчит злоумышленникам использование известных или недавно обнаруженных уязвимостей.

Это безопаснее, потому что, если в веб-сервере есть некорректная конфигурация, возможно, что файлы сценариев (будь то .php, .asp или что-то еще) можно выплюнуть в текстовом виде, а потенциальный злоумышленник увидит весь ваш исходный код и определенные пароли. Поэтому лучше всего поставить только файл index.php в webroot, который, в свою очередь, включает скрипт начальной загрузки извне webroot.

Я помню один пример в реальном мире – в Латвии, где я живу, у нас есть большая социальная сеть «draugiem.lv» (в нашей стране более популярна, чем Facebook), и несколько лет назад весь их исходный код PHP просочился неправильно сконфигурированным сервером, как я описал ранее.

В дополнение к стандартным причинам, приведенным в других ответах: неверная конфигурация сервера, принцип наименьших привилегий и т. Д., Стоит отметить, что многие фреймворки, включая Zend Framework, могут использовать файлы конфигурации, которые находятся в форматах, отличных от PHP, например, .ini , .yml и т. д.

Если они были в общедоступном веб-корне, тогда – в зависимости от конфигурации сервера – они будут поданы непосредственно любому, кто их запрашивает. Поскольку эти файлы конфигурации обычно содержат конфиденциальную информацию, такую ​​как пароли db, API-ключи и т. Д., Безусловно, желательно сделать их недоступными как можно недоступными.

В качестве примера рассмотрим application/configs/application.ini . Если корень doc находился на уровне папки проекта, тогда запрос для:

http://example.com/application/configs/application.ini

доставит ключи в замок.