Я использую REST и OAuth для общения с приложением Rails (из приложения для iPhone, но это не должно быть актуально). Однако я сталкиваюсь с некоторыми проблемами с защитой CSRF в Rails (через protects_from_forgery
).
Я понимаю, что защита CSRF включается только при регулярной отправке формы (т.е. Content-Type = application / x-www-form-urlencoded), поэтому мне было бы хорошо, если бы я отправлял данные JSON или XML. К сожалению, в настоящее время OAuth ограничен запросами application / x-www-form-urlencoded. Существует черновик спецификации , который расширяет OAuth до данных, не кодированных в форме , но это мне сейчас не помогает.
Как я вижу, у меня есть следующие варианты:
Отправьте данные в формате JSON, зная, что они не будут частью подписи OAuth и, следовательно, будут подвергаться атакам типа «человек посередине». Очевидно, не очень привлекательное решение.
Создание специальных действий Rails (например, UsersController#update_oauth
), которые внутренне делегируют обычным действиям (например, UsersController#update
). Затем исключите их из защиты от подделки (protects_from_forgery :only => [:update]
). Это должно сработать и может быть приемлемо для одного или двух действий, но, очевидно, это будет очень грязное решение.
Переопределить защиту Rails CSRF, чтобы игнорировать запросы OAuth. Я не пробовал этого, но похоже, что можно изменить один из хуков (возможно, фильтр verify_authenticity_token
), чтобы считать запросы OAuth успешными.
Кто-нибудь сталкивался с этим раньше? Любые рекомендации? Или я что-то упускаю из виду?