Этот баг называется «кривые руки администраторов и программистов»
Файлы должны лежать выше корня! Тогда всё, что увидит при сбое сервера потенциальный злоумышленник:
<?php require_once '../engine/index.php';
И вот подумал сразу у меня так же подключается через ../
И у меня сразу вопрос, не безопасно или безопасно?
hdtor: Понятно.
Я общем, то, о чём вам писали - это хорошая практика содержать в корневой директории веб-сервера только точку входа в приложение и статические ресурсы.
Указанного вами кода недостаточно для того чтобы сказать, безопасно это или нет. Поясню.
Ситуация 1:
Корень веб-сервера указывает на /var/www/site/public_html. Описанный вами выше файл лежит прямо там. Следовательно, файл инклудится из /var/www/site/include. То есть, если, скажем, у вас будет некорректно настроен сервер, злоумышленник сможет увидеть только файл index.php, но не сможет получить доступ к логике сайта, т.к. она находится вне корня сайта.
Ситуация 2:
Корень веб-сервера указывает на /var/www/site/public_html. Описанный вами выше файл лежит в /var/www/site/public_html/some-directory. Следовательно, файл инклудится из /var/www/site/public_html. То есть, подключаемые файлы находятся в корне веб-сервера и к ним можно сделать прямой запрос.
В ситуации 1 у вас всё нормально. В ситуации 2 у вас есть ещё одно потенциально уязвимое место. Посмотрите как выглядят проекты, например, на Symfony (мой пример). Есть директория src, где лежит вся логика и есть директория web, где лежит точка входа и статика.
Смотрите какая у меня ситуация:
У меня свой написанный движок новостей на двух языка с такой структурой:
admin - админка
include - ядро
ru - папка файлов для русскоязычной версии.
--- дальше в корне идут файлы уже первого языка ---
И вот в папке ru, как раз все файлы подключаются через ../include/core.php...
Вот тут и возникает вопрос безопасно ли это.... Еще интересно следующее, как вообще сделать 2 языка без плодения папок (ru, en, pl)? Но обязательно с такими ссылками: site.com/ru, site.com/en и т.д.?
Так а в чём проблема вынести хотя бы его за корень веб-сервера?
--- дальше в корне идут файлы уже первого языка ---
Ну, как я понимаю, у вас реализовать то, что я описал выше целиком не получится, так как у вас нет единой точки входа.
Вот тут и возникает вопрос безопасно ли это....
Пока файлы, содержащие логику, конфиги и прочее находятся в корне веб-сервера - нет.
Еще интересно следующее, как вообще сделать 2 языка без плодения папок (ru, en, pl)?
Почитайте про такое понятие как роутинг. Существуют различные готовые реализации, которые вы можете подключить к своему приложению. Например тот же Symfony Routing. А как конкретно хранить данные локализации - это уже ваше дело. Есть разные способы.