Rails protect_from_forgery с мобильными приложениями - PullRequest
0 голосов
/ 25 февраля 2012

Я создаю приложение на Rails, и у меня есть protect_from_forgery в моем application.rb. Я также создал RESTful API для мобильных приложений для связи с использованием данных JSON. Я вижу некоторые сайты, которые утверждают, что для того, чтобы мобильное приложение взаимодействовало с приложением rails, они отключают protect_from_forgery для запросов JSON.

Как это решает проблему CSRF? Может ли вредоносный сайт не иметь JSON POST-запроса, который выполняет нежелательные изменения от имени пользователя?

Итак, чтобы решить эту проблему, я решил использовать пользовательский mime-type или, возможно, special key, который будет использовать только мобильное приложение, и затем protect_from_forgery выполнит следующее:

  1. Проверьте, присутствует ли токен csrf как hidden div (верно для веб-приложения и включено по умолчанию).
  2. Если его нет, проверьте это special key или mime-type.

Есть ли способ добиться этого или аналогичного решения этой проблемы?

Обновление

Оказывается, я переосмыслил проблему. Rails является «магическим» и каким-то образом обрабатывает запросы, поступающие из мобильного приложения, автоматически и соответствующим образом, не вызывая исключений. Так что, по сути, нам вообще не нужно было вносить никаких изменений.

Я не совсем проверил, как Rails достигает этого, хотя - с педагогической точки зрения это может быть интересно для некоторых.

1 Ответ

2 голосов
/ 04 марта 2012

Вам не нужно использовать ActiveResources. Если вы отправите запрос в формате xml, он обойдет protect_from_forgery.

curl -H "Content-Type: text/xml" -d "<support-request><from>...</from></support-request>" -X POST http://localhost:3000/support_requests.xml -i

Это должно быть довольно просто.

...