Я изучал некоторые исходные коды PHP, и я чаще всего находил файлы, начиная с
defined('__someconstant__') or exit();
Я знаю, что это предотвращает доступ к файлу напрямую, если предыдущий файл определяет __someconstant__
, но потом я задаюсь вопросом, действительно ли это необходимо … Не существует (даже не основанного на PHP) более чистого способа сделать это, не вводя этого дополнительный код в каждом файле?
Разве нет (даже не на PHP) более чистого способа сделать это, не вводя этот дополнительный код в каждый файл?
Наличие таких фрагментов указывает на плохое структурирование кода, а именно на код, автоматически выполняемый в глобальной области. У вас не должно быть этого or exit();
код в чистой функции / классе. Там было бы лишнее.
Код, который выполняет потенциально опасные действия, не должен быть доступен в Интернете. Выход or exit;
подход является обходным путем. Однако он всегда должен сопровождаться FilesMatch
и Deny from All
в файле .htaccess
. Лучше всего установить весь каталог include недоступным.
Чтобы избежать этих (бесполезных) строк в верхней части (почти) каждого файла, можно:
Храните открытый файл «контроллера» (например, index.php в каталоге, называемом веб- или общедоступным, на котором псевдоним вашего веб-сервера или виртуальный хост указывает на
Храните в других каталогах, таких как lib , config , apps … все файлы, к которым нельзя напрямую обращаться через веб-сервер, просто набрав URL-адрес.
Обычно это структура существующих инфраструктур, таких как Symfony 1.x
Кроме того, вы можете (и, конечно же, будете переписывать URL-адреса) помещать файл .htaccess
, но неверная конфигурация сервера может случайно отключить его, поэтому сохранение исходных файлов в разных каталогах – это ИМО лучше.
Добавляем к ответу @ NullUserException …
Да, есть другие способы предотвращения прямого доступа к файлу (например, htaccess), но для программного обеспечения, которое доступно широкой аудитории, вы не можете действительно полагаться на те технологии, которые там есть. Однако вы можете положиться на простое условие в верхней части файлов.