Безопасное программирование в PHP: подключаемые файлы

Дата: 09.02.2008
Рубрики: : безопасность |

Так либо иначе, при написании систем, которые выходят за рамки простых “парсилок” и должны иметь разветвленную логику приложения, программисты используют параметры, принимаемые из адресной строки, в качестве идентификатора файла для включения.

Рассмотрим случай-попытку “выдирания” содержимого файла путем подстановки путей в адресную строку.
Если вы подключаете файлы через передаваемый параметр в адресной строке (например, адрес выглядит так: http://www.hacked-resource.com/script.php?file=guestbook.php) - это явная недоработка программистов, писавших вашу систему. В 99% ваша система будет использована для взлома вашего сервера. Примером может служить такая комбинация: http://www.hacked-resource.com/script.php?file=././././file

Не менее интересным фактом является то, что php восприимичив к спецсимволам рода перевода строки и конца строки - т.е. программист обязан сам следить за безопасностью своих скриптов. PHP обрывает имя и путь до файла при встрече этих символов. Пример - вы желаете загрузить файл в скрипт, который принимает (формально, конечно же) только файлы с расширением jpeg… а подсунуть ему можно нечто вроде /home/jeurey/Desktop/tesfile.bin\0.jpg (где ‘\0′ является признаком конца строки).

Неродивые программисты, полагающиеся на проверки со стороны браузера очень разочаруются, ведь проверяемая строка (нулевой символ не воспримется js в текстовом поле) будет заканчиваться на jpeg/jpg… Так что, повнимательнее :)

Единственно-верным решением вашей проблемы может служить анализ POST/GET передаваемых данных на стороне сервера, перед началом обработки файлов. Например, просканировать все директории и составить список допустимых ко включению файлов, и на основе этих данных осуществлять фильтрацию. JS стоит использовать исключительно для помощипользователю, чтобы исключить его ошибку… Злонамерянные действия таким образом не отсеешь.

Безопасного Вам программирования ;)

Комментарии

Комментарии (2) на запись “Безопасное программирование в PHP: подключаемые файлы”

  1. Оптимизатор 10.02.2008 22:42

    Спасибо вам за этот материал :)

  2. Роман 11.06.2008 11:46

    Спасибо большое! Как раз пытаюсь создать свой сайт, постараюсь учесть всё выше сказанное.

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.