Примечание редактора. IBM® WebSphere® sMash и IBM WebSphere sMash Developer Edition основаны на широко приветствуемом проекте инкубатора Project Zero (EN). Project Zero - это сообщество разработчиков WebSphere sMash, которое по-прежнему будет предлагать бесплатную платформу разработки приложений с новейшими сборками, функциональными возможностями и поддержкой.
Прежде чем познакомиться с ACF, вы должны понять, что такое Project Zero. Ниже приведена цитата с Web-сайта Project Zero (EN):
"Project Zero - это проект, начатый в IBM®, концентрирующийся на динамичной разработке интерактивных Web-приложений следующего поколения. Project Zero представляет собой простую среду для создания, компоновки и выполнения приложений, основанных на популярных Web-технологиях. В среду Project Zero входит система времени исполнения сценариев Groovy и PHP с прикладными интерфейсами программирования (API), оптимизированными для создания REST-сервисов, интегрированных mash-up-приложений и полнофункциональных Web-интерфейсов."
Поскольку главной целью Project Zero являются динамичные Web-приложения следующего поколения (обычно их относят к категории Web 2.0), данная статья посвящена интерактивным Web-приложениям (содержащим предоставляемое пользователями содержимое), таким как mashup-приложения, вики (wiki) и блоги (blog). Для поддержки этих приложений Project Zero предоставляет ACF в виде библиотеки, которую разработчики могут включить как часть Zero-приложения. ACF предоставляет разработчикам способ снижения незащищенности от таких проблем как межсайтовые сценарии, которые могут возникать в приложениях подобного типа (ссылка на описание межсайтовых сценариев приведена в разделе "Ресурсы").
Предоставленные в данной статье примеры предназначены для демонстрации использования ACF, начиная с простого базового варианта и заканчивая вариантами повышенной сложности. Каждый пример спроектирован на основе предыдущего, более простого примера. Ниже приведен список примеров, каждый из которых подробно описан в следующих разделах:
- Пример 1 - это базовая Ajax-страница, позволяющая пользователям передавать на сервер комментарии к статье, полученной из внешнего источника. Этот пример демонстрирует, что могло бы произойти при использовании активного содержимого (например, JavaScript) в пользовательском комментарии или статье.
- Пример 2 создан на основе примера 1, но имеет поддержку библиотеки ACF. Этот пример демонстрирует работу ACF-фильтрации при наличии в статье активного содержимого (например, JavaScript).
- Пример 3 создан на основе примера 2, но имеет поддержку ACF-фильтрации параметров запроса. Этот пример демонстрирует работу ACF-фильтрации при наличии в пользовательском комментарии активного содержимого (например, JavaScript).
Данный пример приложения можно загрузить по ссылке, приведенной в разделе "Загрузка" данной статьи, и получить опыт подключения функциональных возможностей ACF. Подражая Web-приложениям, объединяющим новости, и блогам, пример приложения позволяет публиковать комментарии по текущим новостям на сервере, который в свою очередь отображает комментарии для других посетителей сайта. Как показано на рисунке 1, верхняя часть страницы отображает результаты объединения новостей (news aggregation), где можно увидеть внедренное потенциально опасное содержимое (мигающий красный текст). При нажатии на панель заголовка Original source of the news показывается оригинальное HTML-содержимое объединения новостей. Можно также публиковать свои комментарии в нижней текстовой области Enter your comments here, которые отображаются в области All comments сразу после нажатия кнопки Post your comment.
Рисунок 1. Пример ACF-приложения
Мы используем самую свежую версию платформы Web 2.0 от IBM (Project Zero) для создания компонентов на стороне сервера. Интерфейсная часть приложения использует развивающиеся технологии Dojo и Ajax.
Для выполнения примера приложения, предоставляемого с данной статьей, необходимо иметь корректно настроенные интегрированную среду разработки Eclipse и плагин Project Zero (ссылка на плагин приведена в разделе "Ресурсы"; при установке можете обращаться к этой статье). После установки можно импортировать пример приложения (ACFSampleApp-1.0.0.zip) как Existing Project в рабочую область (Workspace). Выберите archive file as source (см. рисунок 2). Project Zero предоставляет поддержку ACF через библиотеку zero.acf, которая сконфигурирована как одна из зависимостей приложения в файле ivy.xml.
Рисунок 2. Импорт ACFSampleApp в рабочую область Eclipse
Для начала работы по исследованию функциональности ACF щелкните правой кнопкой мыши на ACFSampleApp и выберите Run as – Project Zero Application. Серверный компонент работает. Затем перейдите в браузере по адресу http://localhost:8080, чтобы протестировать пример приложения.
Сценарий 1. Фильтрация ответа ACF
Первый сценарий предназначен для защиты от опасного содержимого при помощи фильтрации ответа ACF. Фильтрация ответа ACF удаляет активное содержимое (например, JavaScript) из ответного сообщения на основе набора правил фильтрации (описанных ниже). При выполнении примера приложения можно заметить, что в заголовок новостей в верхней части страницы был внедрен мигающий опасный текст, полученный из активного содержимого (JavaScript-код) первого новостного фида (feed). Источник новостного фида можно увидеть путем нажатия панели заголовка Original source of the news, как показано на рисунке 3.
Рисунок 3. Опасный текст в заголовке новостей
Теперь давайте посмотрим, как можно защитить наше приложение от повреждения этим опасным текстом при помощи фильтрации ответа ACF. Фильтрация ответа ACF управляется посредством конфигурационного файла zero.config. Для разрешения работы фильтрации ответа ACF необходима следующая запись (см. листинг 1):
Листинг 1. Настройка фильтрации ответа ACF
# ACF filter rule
@include "${/config/dependencies/zero.acf}/config/acf.config"{
"conditions" : "/request/path =~ /resources/newsViewer(.*)"
}
|
В примере предоставляется эта конфигурация. Для разрешения ACF просто раскомментируйте этот раздел в файле zero.config и перезапустите сервер Project Zero. Эти две строки конфигурационных свойств (показанные на рисунке 4) просто указывают механизму ACF фильтровать все активное содержимое в ответе на URI /resources/newsViewer, используя предопределенный набор правил по умолчанию, предоставляемый с ACF.
Рисунок 4. Настройка фильтрации ответа ACF
При повторном запуске приложения вы больше не увидите раздражающего мигающего текста.
Сценарий 2. Фильтрация запроса ACF
Совместное участие и сотрудничество в Web 2.0-приложениях часто подразумевает разрешение пользователям вводить и публиковать содержимое на сервере. При этом возникает проблема защиты от опасного содержимого (например, JavaScript), которое визуализируется сервером. В примере приложения пользователь может публиковать комментарии на сервере. Для демонстрации работы опасного сценария введите текст, приведенный в листинге 2, в область Enter comments.
Листинг 2. Пример опасного сценария
<script>alert("You are under attack!")</script>
|
Нажмите кнопку Post your comment. Вы увидите, что область All comments result пуста, но появляется раздражающее всплывающее JavaScript-сообщение.
Итак, как отфильтровать HTTP-запрос и предохраниться от опасных JavaScript-атак? ACF предоставляет мощный набор API для решения данной задачи. Эти API указывают, содержится ли активное содержимое (например, JavaScript) в параметрах HTTP-запроса на основе набора правил фильтрации. Если активное содержимое обнаружено, вы можете сгенерировать соответствующую исключительную ситуацию или использовать еще одну библиотеку из Project Zero под названием XMLEncoder, которая кодирует активное содержимое, для того чтобы его было невозможно запустить во время исполнения. В нашем примере серверным компонентом, обрабатывающим входящий POST-запрос с комментарием, является класс commentHandler.groovy. В него мы добавим код фильтрации запроса ACF. Вы можете просто раскомментировать код, находящийся в примере, для разрешения этой функциональности, как показано на рисунке 5.
Рисунок 5. Разрешение фильтрации запроса ACF
На этот раз нет необходимости в перезапуске сервера Zero для тестирования функциональности. Перезапустите ваше приложение и поместите тот же самый JavaScript-код в область комментариев. Очевидно, что вы не можете больше публиковать опасное содержимое, что показано на рисунке 6.
Рисунок 6. Пример фильтрации запроса ACF
Да сих пор вы видели, что мощь ACF в области защиты от опасных атак проявляется главным образом на стороне сервера. Для дальнейшего расширения защищенности приложений можно рассмотреть использование возможностей кодирования на стороне клиента, представленных в некоторых современных JavaScript-библиотеках, например, в интегрированной среде Dojo. Например, полнофункциональный текстовый редактор Dojo автоматически кодирует введенную пользователем информацию в виде HTML, потреблять который относительно безопасно. Примечание: хотя кодирование на стороне клиента является очень полезным, оно не заменяет ACF-фильтрацию, выполняющуюся на стороне сервера, поскольку пользователи могут легко обойти все, что делается на стороне клиента.
Пример приложения предоставляет основанный на Dojo полнофункциональный текстовый редактор. Для тестирования перейдите в браузере по адресу http://localhost:8080/clientfilter.gt. Как показано на рисунке 7, JavaScript, опубликованный через Dojo-редактор, закодирован до отправки на сервер. Таким образом, опубликованное содержимое не будет интерпретироваться браузером как активный JavaScript-код.
Рисунок 7. Реализация Dojo-редактора
Вы увидели, как ACF обеспечивает повышенную гибкость для развертывания приложений, разрешая приложениям фильтровать активное содержимое и не требуя от разработчиков значительного их изменения. Такая повышенная гибкость позволяет приложениям лучше изолироваться от проблем, связанных с активным содержимым (например, межсайтовых сценариев (cross-site scripting - XSS)), которое, к сожалению, является обычной атакой на многие Web 2.0-приложения. Попробуйте поработать с примером приложения и выскажите свое мнение на форуме Project Zero (см. раздел "Ресурсы").
| Описание | Имя | Размер | Метод загрузки |
|---|---|---|---|
| Пример приложения для данной статьи | ACFSampleApp-1.0.0.zip | 32 КБ | HTTP |
Научиться
- Оригинал статьи "Use Active Content Filtering for Project Zero and WebSphere sMash application security" (EN).
- На сайте Project Zero Documentation (EN) размещена документация по этому проекту, включая FAQ, учебные руководства и демонстрационные материалы:
- Изучите инструкции по установке Project Zero (EN).
- Взгляните на пример PHP-приложения Employee Demo (EN).
- "Руководство разработчика" - полезный ресурс в вашем наборе инструментальных средств Project Zero.
- Дополнительная информация об атаках с использованием межсайтовых сценариев в Wikipedia (EN).
- Дополнительная информация о Project Zero Active Content Filtering (EN).
-
Project Zero XML Encoding (EN).
- Подключайтесь к сообществу Project Zero и узнайте, о чем же это все говорят (EN)!
Получить продукты и технологии
- Загрузите плагин Eclipse Project Zero, который содержит программу установки для загрузки дополнительных библиотек времени исполнения Zero из репозитория Zero package.
- Загрузите Project Zero и начните применять знания, полученные в данной статье.
Обсудить
- Примите участие в обсуждении материала на форуме.
-
Принимайте участие в
блогах developerWorks
и подключайтесь к сообществу
developerWorks.
- Примите участие в дискуссионном форуме projectzero.org.
Тодд Кэплингер (Todd Kaplinger) - старший инженер-программист в IBM Software Group. В настоящее время - разработчик и руководитель группы Security в Project Zero. Тодд является экспертом в таких Web-технологиях как JSP, Servlet и PHP, а также в развивающейся технологии Web 2.0 и том, как она влияет на предприятия. Тодд состоит членом экспертной группы, отвечающей за "JSR 223: написание сценариев для Java Platform" и членом альянса Open AJAX Alliance, занимающегося вопросами взаимодействия между различными реализациями интегрированных Ajax-сред в области системы защиты. Тодд является руководителем и разработчиком проекта IBM WebSphere Webcontainer and Remote Request Dispatcher (RRD), а также принимает участие в создании спецификации JSR 154 Servlet 2.5 в качестве представителя IBM в группе Servlet Expert group.
Масайоши Терагучи (Masayoshi Teraguchi) - член исследовательской группы в IBM Tokyo Research Laboratory. Последние 5 лет изучал технологии XML, Web Services и Web Services Security (WSS). В настоящее время занимается системой защиты и производительностью технологии Web 2.0.
Ганг Чен (Gang Chen) - сертифицированный специалист по информационным технологиям в IBM Software Services for WebSphere (ISSW). Ганг является экспертом по оказанию помощи корпоративным клиентам в их проектах и реализациях приложений для электронной коммерции. С недавних пор занимается развивающейся технологией Web 2.0. Является также одним из авторов IBM Redbook "IBM WebSphere Application Server V6 Scalability and Performance Handbook (EN)".