Представленный метод не является полностью безопасным.
PHP действует как текстовый препроцессор, что означает, что в случае ошибки шлюза веб-сервера содержимое скрипта может быть отправлено с mime-type text / html, что может привести к раскрытию конфиденциальных данных, таких как пароли к базе данных SQL или учетных записей ftp.
Административные сценарии, также помещенные в publi c несут риск их несанкционированного выполнения, если IP-адрес, контролируемый в сценарии, был совместно используемым (или динамически передаваемым) адресом. Скрипты Cron выполняются с использованием php -cli, поэтому шлюз веб-сервера ни для чего не нужен, и анализ IP в скрипте становится ненужным, если он находится за пределами каталога publi c.
Удаленное выполнение с использованием, например, curl может быть единственной причиной для размещения административных скриптов в пространстве publi c www server.. Обычно это слабое решение, потому что тогда скрипт выполняет интерпретатор php (а не php -cli) с другими настройками , обычно с резко ограниченным временем выполнения. Однако, если это по какой-то причине необходимо, он должен находиться в отдельном каталоге, доступ к которому ограничен указанными c IP-адресами с использованием .htaccess (и / или .iptables) и с назначенным именем пользователя и паролем с помощью htpasswd (Basi c Auth).
Идеальная ситуация, когда каталог publi c в www server (далее именуемый publi c) содержит только содержимое stati c (img, css , js ... файлов) и триггер приложения, расположенный в родительском каталоге. Пример структура:
/home/username/domainname/(apps,crons,public,tmp)
Каталог приложений должен содержать все файлы и каталоги приложений. Каталог publi c должен содержать только содержимое stati c (для порядка в некоторых подкаталогах) и символьную c ссылку на главный файл приложения, которую можно получить с помощью команды:
ln -s ../apps/app.php index.php
Некоторые конфигурации сервера не позволяют использовать символические ссылки. Затем вы можете использовать файл index. php, содержащий:
<?php
include('/home/username/domainname/apps/app.php');
Это решение немного хуже, потому что в случае отказа шлюза раскрывается структура каталогов. Однако конфиденциальные данные по-прежнему защищены, поскольку веб-сервер не может отображать содержимое файлов, которых нет.
Представленный анализ IP может использоваться для отображения части содержимого для авторизованных адресов, при условии, что сам файл php находится за пределами веб-сервера publi c. Однако, если это целые веб-сайты, я бы предпочел использовать iptables или .htaccess для управления доступом к ним.