Как правильно выносить «важные» файлы за пределы корня сайта (PHP)?

Знаю, что ядро веб проекта рекомендуется выкладывать за пределы корня сайта. Не совсем понимаю, что это значит. К примеру, есть у меня проект, сделанный по шаблону mvc. Есть папка core, где хранятся базовые классы: модель, контроллер, вид. И есть «рабочие» папки, где уже лежат производные классы от упомянутых, плюс папка с шаблонами сайта.

Есть конфиги и файл index.php, ну и куча других файлов и папок со всякими вспомогательными скриптами, js, css и т.д.. Что из этого я должен выносить «за пределы корня сервера»? Если в качестве примера брать обычный виртуальный хостинг, в котором есть папка public_html, то нужно располагать важные файлы на одном уровне с этой папкой?
  • Вопрос задан
  • 5371 просмотр
Пригласить эксперта
Ответы на вопрос 4
@m-haritonov
Вынесение за пределы корня сайта это частный случай правила "запретить доступ к системным файлам из браузера".

Например, в ядре находится скрипт "add-user.php", в котором не осуществляется проверка прав доступа (т.к. такая проверка осуществляется в файле index.php, через который должны вызываться все другие скрипты с помощью PHP инструкции "include").

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

Поэтому в папке со скриптами ядра создают специальный файл, указывающий веб-серверу, что напрямую предоставлять доступ к файлам в папке нельзя (в случае веб-сервера apache, это файл ".htaccess" с содержимым "deny from all") или вообще выносят файлы ядра за пределы той папки, файлы из которой доступны браузеру напрямую. Второй способ (вынесение файлов за пределы) считается более надёжным.
Ответ написан
Комментировать
pavel_salauyou
@pavel_salauyou
Symfony2 & Angular разработчик
в корне должно лежать только то что доступно извне, это css файлы, js файлы, картинки, robots.txt т.д. и один фронт контроллёр например index.php, всё остальное должно находится в другом месте неважно где, главное чтобы прямой доступ был закрыт.
Ответ написан
Комментировать
arutyunov
@arutyunov
Mooza.ru — Делаем сайты
Есть папка webroot - это папка, куда "смотрит интернет". Все, что выше это папки извне недоступно, однако мы можем эти файлы из директорий выше заинклюдить и выполнить в index.php, который лежит в webroot.
Также в webroot кидают всю статику - css, js, картинки, видео, аудио и т.д.
Ответ написан
Комментировать
AlexFreem
@AlexFreem
addicted
Я возможно покажу полную неосведомленность в вопросе, но почему не применим следующий метод:
Все файлы которые предполагается подключать, которые несут в себе какие то действия связанные с правами доступа и так далее сохраняем с различными расширениями типа inc, class.php, tpl.php и так далее.

А потом просто парой строк в .htaccess запрещаем к ним доступ.
<FilesMatch "\.(inc|tpl(\.php)|class(\.php))">
  Order allow,deny
</FilesMatch>


До файла index.php который будет является фронтенд-контроллером разрешаем доступ. А собственно сам файл index.php в себе подключает уже всё что необходимо.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы