- •Раздел 16. Многоуровневые и многослойные приложения. Шаблон проектирования Модель-Представление-Контроллер
- •16.1. Многоуровневые приложения
- •16.2. Многослойные приложения
- •16.3. Шаблон проектирования Модель-Представление-Контроллер
- •16.4. Реализация шаблона Модель-Представление-Контроллер в веб-приложениях
- •Раздел 17. Базы данных в веб-приложениях
- •17.1. Основные понятия баз данных
- •17.2. Системы управления базами данных
- •17.3. Язык запросов sql
- •Транзакции
- •17.4. Доступ к базам данных из Java
- •Пример: база данных студентов
- •Поддержка транзакций
- •17.5. Объектно-реляционная проекция
- •Лекция 18. Безопасность Интернет-приложений
- •18.1. Аутентификация и авторизация
- •18.2. Понятие безопасности Интернет-приложений
- •18.3. Классы атак сетевого уровня Сниффинг пакетов
- •Подмена ip-адреса
- •Отказ в обслуживании
- •Сетевая разведка
- •18.4. Криптографические технологии
- •18.5. Уязвимости уровня приложений
- •Уязвимости системы аутентификации
- •Уязвимости системы авторизации
- •Атаки на стороне клиента
- •Выполнение кода на сервере
- •Разглашение информации
- •Злоупотребление функциональными возможностями
- •Наиболее распространенные уязвимости
- •18.6. Резюме
Атаки на стороне клиента
Межсайтовое выполнение сценариев: интернет-приложение позволяет сохранить исполняемый код (скрипт, апплет, flash), который будет выполнен в браузере другого пользователя. При этом злоумышленник может получить доступ к информации, доступной с помощью браузера — cookie, идентификатор сессии, значения полей форм, IP-адрес и т. д. Внедренный скрипт может использоваться для организации атак от имени другого пользователя, скрытого обращения к другим веб-страницам и др.
Выполнение кода на сервере
-
Внедрение серверных расширений: также как и предыдущий класс атак является следствием плохой проверки данных, приходящих от клиента. Атака заключается во внедрении скриптов, отрабатывающих в контексте сервера, в том числе команд операционной системы. Например, это возможно, если на основе данных пользователя генерируется исполняемый на сервере код.
-
Внедрение SQL-операторов: при плохой проверке данных, приходящих в запросе и генерации на их основе SQL-операторов, возникает возможность модифицировать запрос к серверу баз данных. Запрос будет выполнен с уровнем привилегий работающего приложения. Результат успешной атаки может быть впечатляющим — вплоть до получения контроля над сервером СУБД и его операционной системой. Например, оператор "SELECT username FROM USERS WHERE password = '" + password + "'", при передаче password равным «' or 1='1», запрос возвращает список всех пользователей. Для борьбы с SQL-инъекциями следует экранировать специальные символы в пользовательских данных (обычно в SQL-операторах перед апострофом ставится слеш, например, «\'»). В Java для экранирования следует использовать класс PreparedStatement. В PHP следует использовать функции mysql_escape_string, mysql_real_escape_string, addslashes и т. п.
Разглашение информации
-
Индексирование (просмотр) директорий: индексирование директорий становится возможным при некорректной настройке политик серверной безопасности. Нельзя надеяться на то, что раз ссылка на документ отсутствует, то он недоступен. Специальные программы-сканеры уязвимостей могут динамически формировать адреса и находить спрятанные файлы (конфигурационные файлы, файлы сценариев, резервные копии и т.д.).
-
Обратный путь в директориях: атаки этого класса рассчитаны на недочеты в скриптах, подключающих другие файлы и недостаточно проверяющие пути подключаемых файлов, а также на уязвимости самого сервера, такие как отсутствие ограничений на доступ к разным директориям, в том числе разрешение обращения к файлам и каталогам, располагающимся вне директории веб-сервера. Например: 1) Использование обратного пути для доступа к директории: http://example/../../dir; 2) подмена имени файла: в http://example/index.cgi?home=main.htm, main.htm может быть заменен на другой файл.
-
Утечка информации: эта уязвимость возникает в ситуациях, когда приложение публикует служебную информацию, например, системные сообщения об ошибках или комментарии разработчиков. Злоумышленник может использовать доступную информацию для получения представления об используемых алгоритмах, запросах к базам данных, структуре каталогов сервера, программном обеспечении для последующей подготовки атаки на сервер.