2016-11-20 21 views
4

Компонент нашего webapp - это (более-менее) SPA. то есть он работает с использованием javascript и не генерирует никаких просмотров страниц или обновлений. Это может привести к тому, что токены CSRF будут устаревать. Особенно для пользователей мобильных телефонов, которые могут отключить браузер и открыть его через несколько дней/недель. Этот SPA иногда нуждается в обновлениях POST для сервера.Безопасно ли обходить защиту CSRF для XHR? (Rails)

Мы видим несколько запросов POST для javascript, которые генерируют ошибку 422 с предупреждением о защите CSRF. Я почти уверен, что токен CSRF присутствует, но устарел. Я пытаюсь найти лучший способ обойти его.

Если я правильно понимаю вещи и согласно OWASP CSRF Cheat Sheet, запросы XHR должны быть безопасными, если CORS не открыт на той же конечной точке. То есть, вредоносный сайт не может обработать запрос с заголовком XHR без javascript. И с javascript запрос должен быть заблокирован, так как он является перекрестным.

Единственный ресурс I found имел довольно смутно написанный пример, где защита CSRF отключена для json. Я не мог понять, рекомендует ли он делать это, или избегать этого.

Действительно ли безопасно или небезопасно отключать защиту CSRF для запросов XHR/json на рельсах, где CORS не включен?

+0

Я создал PR для обновления документации Rails. См. Https://github.com/rails/rails/pull/31640 – gingerlime

ответ

0

Короткий ответ: - безопасный, но вам нужно быть осторожным с CORS.

Вот отрывок из документации Перемен suggested на рельсы:

Это, как правило, безопасны, чтобы исключить запросы XHR от защиты CSRF (как фрагмент кода выше делает), поскольку запросы XHR могут быть сделаны только от такое же происхождение. Обратите внимание, однако, что любой домен третьего лица с перекрестным происхождением , разрешенный через CORS , также сможет создавать запросы XHR. Обязательно проверьте свой белый список CORS перед отключением защиты подделок для XHR.

Обратите внимание, что у меня еще не было отзывов от команды rails об этом.