2009-05-23 5 views
7

В настоящее время мы разрабатываем приложение на основе AJAX, которое будет взаимодействовать с сервером через API RESTful. Я рассмотрел потенциальные схемы защиты от атак XSRF против API.Защита XSRF в приложении стиля AJAX

  1. Пользователь подтверждает подлинность и получает куки сессии, которая также дважды представленный с каждым запросом.

  2. Мы реализовать OAuth потребителя в Javascript, получить маркер, когда пользователь входит в систему, и подписать все запросы с этой лексемы.

Я склоняюсь к OAuth подход, в основном потому, что я хотел бы, чтобы предоставить доступ к 3-й партии к нашему API, и я предпочел бы не реализовать две схемы аутентификации.

Есть ли причина, по которой потребитель OAuth не работал бы в этой ситуации?

ответ

0

Самый простой способ предотвратить XSRF, чтобы проверить референт каждого запроса RESTful, чтобы убедиться, что запрос поступает из того же домена. Сессионный файл cookie важен для сохранения состояния, но он не будет защищаться от XSRF, потому что он также будет отправлен с поддельным запросом. Его общая информация о системе защиты XSRF, основанной на реферерах, на встроенном сетевом оборудовании с ограниченными требованиями к памяти, Motorola использует этот метод на большинстве своих аппаратных средств. Это не самая безопасная защита XSRF, защита на токенах лучше, но обе системы все равно могут быть обойдены XSS. Самая большая проблема с защитой на основе токенов XSRF заключается в том, что требуется много времени, чтобы вернуться и исправить каждый запрос, и вы, вероятно, пропустите несколько запросов.

Обязательно прочитайте на same origin policy и до scan your site for xss. Вы также должны прочитать 10 лучших OWASP за 2010 год A3-Broken Authentication and Session Management.

4

Большинство библиотек AJAX установит дополнительный заголовок «X-Requested-With: XMLHttpRequest», который трудно подделать при базовой атаке XSRF (хотя это возможно в сочетании с XSS). Проверка того, что этот заголовок существует, является хорошей стратегией защиты в глубину, если вы ожидаете, что все ваши запросы будут AJAX.

1

Используйте двухэтапный запрос, первый запрашивающий у сервера непредсказуемый токен, второй запрашивающий реальное действие с токеном.

Поскольку злоумышленник не может предсказать токен и не может его прочитать (такая же политика происхождения), он не может дать действительный токен во втором запросе.

Но будьте осторожны, чтобы не просочиться лексемы (узнать о захвате JSON с помощью, когда они влияют на значение глобальной переменной и так далее) и читать:

http://www.google.com/search?q=xsrf+defence

 Смежные вопросы

  • Нет связанных вопросов^_^