GWT RPC - Это делает достаточно для защиты от CSRF?

ОБНОВЛЕНИЕ: GWT 2.3 представляет лучший механизм для борьбы с нападениями на XSRF. См. http://code.google.com/webtoolkit/doc/latest/DevGuideSecurityRpcXsrf.html


Механизм RPC GWT делает следующие вещи на каждом Запросе HTTP -

  1. Наборы два пользовательских заголовка запроса - X-GWT-Permutation и X-GWT-Module-Base
  2. Устанавливает тип контента как text/x-gwt-rpc; charset=utf-8

Запросом HTTP всегда является POST, и на стороне сервера ДОБИРАЮТСЯ, методы выдают исключение (метод, не поддерживаемый).

Кроме того, если эти заголовки не установлены или имеют неправильное значение, обработку сбоев сервера за исключением "возможно CSRF?" или что-то к тому эффекту.

Вопрос: действительно ли это достаточно для предотвращения CSRF? Существует ли способ установить пользовательские заголовки и измениться, тип контента в чистом перекрестном сайте вызывают метод подделки?

10
задан Sripathi Krishnan 8 September 2011 в 07:11
поделиться

3 ответа

Если этот GWT RPC используется браузером, то он на 100% уязвим для CSRF. Тип содержимого может быть задан в элементе html

. X-GWT-Permutation и X-GWT-Module-Base не входят в черный список запрещенных заголовков Flash. Таким образом, можно провести CSRF-атаку с помощью Flash. Единственный элемент заголовка, которому можно доверять для защиты от CSRF, - это "referer", но это не всегда лучший подход. Используйте защиту CSRF на основе токенов, когда это возможно.

Вот несколько эксплойтов, которые я написал и которые должны пролить свет на непонятную атаку, которую я описываю. Флеш-эксплойт для этого будет выглядеть примерно так здесь и здесь - это js/html-эксплойт, который изменяет тип содержимого.

Мой эксплойт был написан для Flex 3.2, правила изменились во Flex 4 (Flash 10) Вот последние правила, большинство заголовков могут быть манипулированы только для запросов POST.

Flash-скрипт, использующий navigateTo() для CSRF: https://github.com/TheRook/CSRF-Request-Builder

6
ответ дан 3 December 2019 в 23:49
поделиться

Я знаю, что задал этот вопрос, но примерно через несколько дней исследования (благодаря указателям от Rook!), Я думаю, что у меня есть ответ.

То, что GWT предлагает "из коробки", не защитит вас от CSRF. Вы должны предпринять шаги, описанные в Безопасность приложений GWT , чтобы оставаться в безопасности.

GWT RPC устанавливает заголовок content-type равным text / x-gwt-rpc; charset = utf-8. Хотя я не нашел способа установить это с помощью HTML-форм, это тривиально сделать во флэш-памяти.

Пользовательские заголовки - X-GWT-Permutation и X-GWT-Module-Base - немного сложнее. Их нельзя установить с помощью HTML. Кроме того, они не могут быть установлены с помощью Flash, если ваш сервер специально не разрешает это в crossdomain.xml. См. Безопасность Flash Player 10 .

Кроме того, если SWF-файл хочет отправлять пользовательские заголовки HTTP куда угодно , кроме своего собственного исходного хоста, должен быть файл политики на {{ 1}} HTTP-сервер, на который отправляется запрос . Этот файл политики должен перечислить хост SWF-файла с источником (или большим набором хостов) как , которому разрешено отправлять настраиваемые заголовки на этот хост. .

Теперь RPC GWT бывает двух видов. Существует старый RPC в формате пользовательской сериализации и новый де-RPC на основе JSON. AFAICT, клиентский код всегда устанавливает эти заголовки запроса. RPC старого стиля теперь не применяет эти заголовки на стороне сервера, поэтому возможна CSRF-атака. Новый стиль de-RPC принудительно применяет эти заголовки, и поэтому может или не может быть возможно атаковать их.

В целом, я бы сказал, что если вы заботитесь о безопасности, убедитесь, что вы отправляете надежные токены CSRF в своем запросе, и не полагайтесь на GWT, чтобы предотвратить это для вас.

3
ответ дан 3 December 2019 в 23:49
поделиться

Я не уверен, есть ли простой способ (мне бы тоже было очень интересно узнать об этом! ), но по крайней мере, похоже, есть некоторые продвинутые способы выполнения произвольных межсайтовых запросов с произвольными заголовками: http://www.springerlink.com/content/h65wj72526715701/ Я не купил статью, но аннотация и введение действительно звучат очень интересно.

Может быть, кто-нибудь здесь уже прочитал полную версию статьи и может немного дополнить ее?

0
ответ дан 3 December 2019 в 23:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: