Задача:
Нужно сделать включение файлов (include) максмально безопасным.
Решение:
Функции PHP, которые включают файлы:
- include
- include_once
- require
- require_once
Суть атак сводится к том, чтобы выполнить код с другого сайта.
Чтобы защититься от подобных атак:
- Проверять передаваемые данные.
Делать проверку регулярным выражением или другими средствами данных, которые получает скрипт. - Настройки PHP
Убедитесь, что в файле php.ini указано:
allow_url_include = Off //запрет включения файлов по URL (не локальных)
allow_url_fopen = Off //запрет fopen открывать URL, а только локальные файлы
register_globals = Off //отключить инициализацию глобальных переменных
safe_mode = On //включить safe_mode - Использовать абсолютный путь.
Подключатье файл только абсолютным путем. Если файл не существует, то PHP ищет этот файл в папках из include_path. - Указывать в коде файлы, которые можно включать
Если включаемые файлы известны, то стоит использовать switch для проверки.
global $page;
switch ($page)
{
case '':
include ("pages/main.php");
break;
case 'page1':
include ("pages/folder/page1.php");
break;
}
При этом в качетве параметра можно передавать лучше передавать не имя файла, а какой-либо код. Например, md5-сумму пути к файлу. - Проверять существование файла.
Можно проверить функцией file_exists() существование локального файла. Если файлов много, то это может сильно нагружать сервер - используйте осторожно! - Ограничивать загружку пользователями произвольных файлов на сервер
Ограничивать расширения файлов, которые пользователи могут загружать до самых необходимых. - Исключить из включения папки, в которые пользователи закачивают свои файлы.
Не включать файлы из папок, где хранятся файлы, которые загружают пользователи. - Не включать файлы из системных папок.
Чистить пути типа "../../../../usr/local/apache/logs/access.log" функцией stripslashes()
Полезные ссылки:
- PHP Manual. Security
- http://forum.ru-board.com/topic.cgi?forum=24&topic=7758 - php-шел
Использованные материалы:
Bookmark/Search this post with












Комментарии
Мне кажется что заголовок материала неверный.
Инклуд и так безопасен. Верно было бы сформулировать так
Безопасный инлкюд при улсовии динамического формирования пути инклуд обьекта на онсовании данных полученных из внешнегоисточника.
или еще попроще как нибудь.