1: проверка количества включенных файлов
if( count(get_included_files()) == ((version_compare(PHP_VERSION, '5.0.0', '>='))?1:0) )
{
exit('Restricted Access');
}
Логика: PHP завершается, если не выполнено минимальное число включений. Обратите внимание, что до PHP5 базовая страница не считается включенной.
2: определение и проверка глобальной константы
// In the base page (directly accessed):
define('_DEFVAR', 1);
// In the include files (where direct access isn't permitted):
defined('_DEFVAR') or exit('Restricted Access');
Логика: Если константа не определена, то выполнение не начнется с базовой страницы, и PHP прекратит выполнение.
3: удаленная авторизация адреса
// Call the include from the base page(directly accessed):
$includeData = file_get_contents("http://127.0.0.1/component.php?auth=token");
// In the include files (where direct access isn't permitted):
$src = $_SERVER['REMOTE_ADDR']; // Get the source address
$auth = authoriseIP($src); // Authorisation algorithm
if( !$auth ) exit('Restricted Access');
Недостатком этого метода является изолированное выполнение, если токен сеанса не предоставлен с внутренним запросом. Проверьте через адрес обратной связи в случае конфигурации с одним сервером или белый список адресов для многосерверной или серверной инфраструктуры с балансировкой нагрузки.
4: авторизация токена
Как и в предыдущем методе, можно использовать GET или POST для передачи токена авторизации во включаемый файл:
if($key!="serv97602"){header("Location: ".$dart);exit();}
Очень грязный метод, но, возможно, самый безопасный и универсальный одновременно при правильном использовании.
5: Конфигурация веб-сервера
Большинство серверов позволяют назначать разрешения для отдельных файлов или каталогов. Вы можете поместить все свои включения в такие ограниченные каталоги и настроить сервер на их запрет.
Например, в APACHE конфигурация сохраняется в файле .htaccess
. Учебное пособие здесь .
Обратите внимание , однако, что специфичные для сервера конфигурации не рекомендуются мной, потому что они плохо переносимы между различными веб-серверами. В тех случаях, когда алгоритм deny сложен или список запрещенных каталогов довольно большой, он может сделать сеансы реконфигурации только ужасными. В конце концов, лучше всего обработать это в коде.
6: Размещение включает в безопасном каталоге за пределами корня сайта
Наименее предпочтительный из-за ограничений доступа в серверных средах, но довольно мощный метод, если у вас есть доступ к файловой системе.
//Your secure dir path based on server file-system
$secure_dir=dirname($_SERVER['DOCUMENT_ROOT']).DIRECTORY_SEPARATOR."secure".DIRECTORY_SEPARATOR;
include($secure_dir."securepage.php");
Логика:
- Пользователь не может запросить какой-либо файл за пределами папки
htdocs
, поскольку ссылки будут выходить за рамки адресной системы сайта.
- Сервер php напрямую обращается к файловой системе и, следовательно, может обращаться к файлам на компьютере так же, как это делает обычная программа с необходимыми привилегиями.
- Поместив включаемые файлы в этот каталог, вы можете гарантировать, что php-сервер получит к ним доступ, в то время как горячая ссылка будет запрещена для пользователя.
- Даже если настройка доступа к файловой системе веб-сервера не была выполнена должным образом, этот метод предотвратит случайное обнародование этих файлов.
Пожалуйста, извините за мои неортодоксальные соглашения о кодировании. Любые отзывы приветствуются.