Приложений состоящих из одного скрипта большая редкость. Программная начинка даже самого простенького сайта состоит из десятков модулей, связанных между собой сложнейшей иерархическими связями. Это приводит к двум проблемам:
– возможности обхода систем авторизации;
– отсутствие мер контроля входа данных в служебных скриптах.
Например, пользователь вводит в поле “search” запрос, браузер, извлекая его, передает скрипту поиска, который в свою очередь находит необходимый файл документа с требуемым содержанием, затем передает его имя другому скрипту, отвечающий за его отображение.
Разработчики предполагают, что вторые скрипты будут вызываться первыми и наверняка не станут проводить процедуру по фильтрации ввода вторых скриптов. Но это не отменяет вероятности вызова злоумышленниками этих скриптов, передав им имена любых файлов, которые им захочется посмотреть. Например, "/etc/passwd".
Любые данные получаемые программами извне, в обязательном порядке должны быть проверены. Важно, чтобы запрашиваемый файл пользователем, в самом деле, можно было просматривать.
Надежным способом считается передача не имени отображаемого файла, а индекса в списке доступных для просмотра посетителей файлов. Недостатки:
– чрезмерная сложность cкрипта;
– необходимость постоянной корректировки списка доступных пользователям файлов при очередном удалении или добавлении новых данных на сервер;
Существует массу приемов позволяющих обойтись без этих проверок.
На просторах сети можно найти почтовые системы, которые работу по алгоритму “входные” скрипт проводит проверку пароля и имени пользователя, и если все совпадает, передают одно имя пользователя без требуемого пароля следующему скрипту работающий с почтовым ящиком. Злоумышленнику ничего не стоит вызвать последний скрипт и получить, таким образом, доступ к корреспонденции всех пользователей. Похожую ошибку совершают и в Internet-магазинах. Если идентификатор до безобразия прост, например: 123, то злоумышленнику не составит особого труда заказать товары от имени любого покупателя магазина.
Сюда следует отнести и ошибки в обработке динамически генерируемых форм.
Помните, никогда не передавайте свои секретные данные методом GET, т.к. информация помещается в тело URL, а вероятность, того что сервер может оказаться сервером злоумышленника все таки есть и угроза перехвата информации весьма велик.
Намного безопаснее метод POST, его суть сводится к помещению содержимого запросов в HTTP–заголовок.