Ответ 1
Вы можете безопасно удалить предупреждения со следующим:
skip_before_filter :verify_authenticity_token
Это должно входить в каждый контроллер API Rails, который у вас есть, или если у вас есть base_controller
для всех контроллеров API, тогда поставьте его там.
Если вы также можете получить доступ к своему приложению через веб-браузер, не помещайте эту строку в application_controller
, поскольку вы будете создавать уязвимость безопасности.
Безопасно удалять csrf
для вызовов API, поскольку конкретная уязвимость может выполняться только через веб-браузер.
Обновление 16 декабря 2013 года
Я видел некоторые ссылки на этот ответ и другой контент, который предлагает разъяснение. API может быть уязвим для CSRF, если вы используете методы проверки подлинности в Интернете для аутентификации API - например, сессий или файлов cookie.
В есть несколько хороших подробностей. Является ли ваш веб-API восприимчивым к эксплойту CSRF?.
Мой совет по-прежнему относится к пользователям RestKit, поскольку учетные данные пользователя вряд ли будут основаны на сеансах или файлах cookie, а скорее на именах пользователей или api.
Если ваш API может быть аутентифицирован с помощью сеанса или файлов cookie, вам следует избегать пропуска : verify_authenticity_token
, и вам следует подумать о переходе на проверку подлинности на основе api.
Если ваш API может быть аутентифицирован с именем пользователя и паролем, который также используется для аутентификации в Интернете, все еще существует потенциальный эксплойт, хотя он менее серьезен, так как он потребует от пользователя ввода имени пользователя и пароля для вашего сайта в поле HTTP Auth при посещении сайта с помощью эксплойта. Опять же, для лучшей безопасности вы должны подумать о переходе на аутентификацию на основе api.
Стоит отметить, что я не согласен с тем, что вам нужно добавить :only => [:your_method]
для дополнительной защиты, при условии, что у вас есть изолированные контроллеры api, ваш api не смешивается с вашими веб-ответами, и вы не используете сеанс или файлы cookie. Если они на месте, вы можете безопасно добавить skip_before_filter
в base_controller
для своего api.