![]() |
Ajax и [без]опасность. Сравнительный обзор и анализ
AJAX и [без]опасность. Сравнительный обзор и анализ Архитектура web-приложений В традиционных web-приложениях (не использующих AJAX) основная нагрузка на клиентской стороне ложится на браузер: он и данные от пользователя принимает, и HTTP-запросы отправляет/обрабатывает. JavaScript используется только для простой логики и оптимизации: проверить равенство одинаковых паролей, etc… Запросы браузера обрабатываются на сервере: внутренняя логистика (PHP, PERL, ASP, ASPX, JSP, etc) проверяет данные пользователя, обрабатывает их (возможно, используя базы данных) и отправляет ответ пользователю. Схема работы традиционного web-приложения: http://heliosart.info/images/others/image001.gif http://heliosart.info/images/others/image001.gif Минусы традиционной структуры: • Большая пауза между запросом пользователя и ответом сервера • Традиционные приложения не работают с пользователем на клиентской стороне • Основные факторы, влияющие на задержку: • Время запроса • Время ответа • Ширина канала связи • Время обработки на сервере Что такое AJAX? AJAX (Asynchronous JavaScript and XML, асинхронный JavaScript и XML) – это не какая-то отдельная технология или язык, а принцип разработки интерактивных web-страниц и приложений. Ее датой рождения принято считать 18 февраля 2005 года – день выхода в свет статьи Джесси Джеймса Гарретта «Новый подход к web-приложениям». Технология эта довольно молодая, поэтому освоить ее в полной мере смогли не многие сайты. Впервые этот принцип начала использовать компания Microsoft, реализовав в своем браузере класс XMLHttpRequest для работы с web-версией Outlook. Затем последовали реализации в браузерах Mozilla, Apple Safari и Opera. Сейчас технология AJAX применяется на многих сайтах, особенно в этом усердствует компания Google, использующая ее в значительной части своих сервисов. К примеру: gmail.com, maps.google.com, Google Suggest, Google Spell-check. Архитектура AJAX-приложений В клиентской части AJAX-приложения главную роль играет JavaScript: • Отправляет HTTP-запрос • Производит моментальный отзыв на действия пользователя • Страница продолжает реагировать на события, действия пользователя • По событию обрабатывает ответ сервера и манипулирует DOM согласно результату запроса http://heliosart.info/images/others/image002.gif http://heliosart.info/images/others/image002.gif Вся технология AJAX основана на объекте XmlHttpRequest, при помощи которого и происходит отправка запроса и получение ответа от сервера. Вот пример реализации: Код:
function LoadXMLDoc(url)• GET • POST • HEAD • WebDav COPY • WebDav DELETE С помощью XmlHttpRequest можно загружать любые типы ресурсов: XML, HTML, простой текст, графику, Flash-ролики, скрипты и другой медиа-контент. Но есть одно «но»: из соображений безопасности запросы можно отправлять только на тот хост и порт, с которого загружена страница. Сама технология AJAX безобидна и безопасна, но ее реализация может сделать из нее опасного зверя. Обзор с точки зрения безопасности При использовании традиционной схемы построения web-приложений, логика, в основном, работает только на стороне сервера, что очень схоже с простыми консольными приложениями: ввел данные – получил ответ. Команды пользователя отсылаются на сервер: • Пользователь нажал на кнопку «Оплатить» • Пользователь отправил сообщение на форум • Пользователь перешел на страницу с информацией о товаре Приложение на сервере возвращает целую страницу с ответом. Атака состоит в отправке специально сформированного запроса: • Отправка сообщения с HTML-кодом (XSS) • Загрузка неправильной картинки с целью взлома (загрузка Shell'а) • Вставка служебных символов в запрос (SQL Injection, php injection, pipe) • Запрос ресурсов, к которым нет доступа Методы защиты: • Проверка всех(!) поступающих данных • Распределение полномочий в проверке между клиентской и серверной стороной: клиент – удобство, сервер – безопасность. Осуществить такую фильтрацию очень просто, так как тип всех вводимых данных известен заранее, допустимые значения известны заранее, количество параметров ограничено и все определяется программистом. В теории все просто, но что мы видим на практике? Уязвимости web-приложений на каждом углу. Согласно последним данным, уязвимо 75% всех ресурсов в сети Internet. Большинство сообщений в почтовых рассылках посвящено web-уязвимостям. При использовании технологии AJAX при построении приложения логистика распределяется между клиентом и сервером. JavaScript реагирует на команды пользователя, делает функциональные запросы к серверу: • Получить цену для товара • Получить список городов для заданной области/штата • Получить последний правильный адрес для пользователя • Обновить данные о пользователе в базе В ответ на запрос приходит не целая страница, а только часть ее, которая была запрошена, что приводит к экономии трафика и увеличению скорости загрузки. При такой реализации взломщик находится ВНУТРИ приложения. Он может узнать имена функций и переменных, параметры функций, их типы и допустимые значения. Теперь он не ищет среди ограниченного числа параметров те, через которые можно произвести атаку, а исследует API приложения прямо изнутри его. Также при атаке он может использовать «доверие» серверной части приложения к данным, полученным от клиентской части. Методы защиты: Фильтрация данных, полученных из форм. Проверка типов файлов, загружаемых пользователем, особое внимание обратить на графические данные (WMF, многочисленные уязвимости в PNG/JPG). Под особым контролем нужно держать работу открытых функций и сервисов, так как они являются путем для взломщика к вашему серверу. Под конец, пример из реального приложения Microsoft «Atlas» Framework: Код:
[WebMethod] |
Цитата:
|
Нету информативности.
То что язык осваиваеться знаеют все и на начальной стадии все допускают ошибки. |
| Время: 07:03 |