Работа с файловой системой
Следующим важным аспектом безопасности является работа с файловой системой.
Одна из самых распространенных ошибок начинающих веб-разработчиков - это
создание файлов данных CGI-программ в директории cgi-bin. Это потенциальная дыра,
т.к. файлы в папке cgi-bin могут быть запущены на выполнение. Допустим, ваша
информационная система позволяет заливать картинки на сервер. Предположим, что
в качестве информационной системы рассматривается аукцион или публикация статей.
В такого рода системах необходимо заливать на сервер файлы данных: статью, картинки.
Теперь представьте, что вместо статьи или картинки вам на сервер зальют исполняемый файл.
Далее злоумышленник наберет в своем броузере запрос
http://your_domen.ru/cgi-bin/file.exe. В Unix системах у файла есть атрибуты
доступа на чтение, запись и выполнение. Если атрибут на выполнение не
установлен, то запустить файл не получится. В windows любой файл с расширением
exe, bat или com считается исполняемым.
Если ваш CGI-скрипт выдает файлы данных с сервера, основываясь на запрашиваемом идентификаторе,
то вам необходимо быть бдительными, чтобы не выдать с сервера секретную информацию. Ни в коем
случае не используйте в качестве указания запрашиваемого файла в CGI-параметрах
относительные или абсолютные пути к файлу. Злоумышленник получит возможность запрашивать
с вашего сервера любые файлы. Одним из первых будет запрошен файл паролей - /etc/passwd.
Пользуйтесь, как было указано выше, идентификатором. Пусть это будет либо число, либо слово,
которое будет обозначать имя строго одной директории или файла. Неплохо, чтобы вы добавляли к полученному
идентификатору префикс или суффикс. Например, надо показать статью под номером 129; значит,
чтобы получить путь к файлам на сервере, вам надо скомпоновать строку path+'/'prefix+129. Еще лучше хранить на сервере
таблицу соответствий между идентификатором и данными на диске, на которые он ссылается.
Обратите особое внимание, что вам необходимо отфильтровать наличие двух точек и слешей.
Злоумышленник может ввести не 129, а ../../../etc/passwd, и тем самым, опять заполучить секретную информацию.
|