Вопрос по ios, ruby-on-rails, ruby-on-rails-3 – Rails показывает «ПРЕДУПРЕЖДЕНИЕ. Не удается проверить подлинность токена CSRF» из RestKit POST

22

Когда я пытаюсь POST отRestKitВ консоли Rails есть предупреждение:

<code>Started POST "/friends" for 127.0.0.1 at 2012-04-16 09:58:10 +0800
Processing by FriendsController#create as */*
Parameters: {"friend"=>{"myself_id"=>"m001", "friend_id"=>"f001"}}
WARNING: Can't verify CSRF token authenticity
(0.1ms)  BEGIN
SQL (1.7ms)  INSERT INTO `friends` (`friend_id`, `myself_id`) VALUES ('f001', 'm001')
(1.1ms)  COMMIT
Redirected to http://127.0.0.1:3000/friends/8
Completed 302 Found in 6ms (ActiveRecord: 3.0ms)
</code>

Вот код клиента:

<code>NSMutableDictionary *attributes = [[NSMutableDictionary alloc] init];
[attributes setObject: @"f001" forKey: @"friend_id"];
[attributes setObject: @"m001" forKey: @"myself_id"];
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObject:attributes forKey:@"friend"];
[[RKClient sharedClient] post:@"/friends" params:params delegate:self];
</code>

Как я могу избавиться от предупреждения?

Ваш Ответ

1   ответ
71

skip_before_filter  :verify_authenticity_token

Это должно входить в каждый контроллер Rails API, который у вас есть, или если у вас естьbase_controller для всех контроллеров API, затем положить его там.

Если вы также можете получить доступ к своему приложению через веб-браузер, не помещайте эту строку вapplication_controller как вы будете создавать уязвимость безопасности.

Безопасно удалитьcsrf для вызовов API как особая уязвимость может быть выполнена только через веб-браузер.

Update 16th December 2013

Я видел несколько ссылок на этот ответ и другой контент, который предлагает разъяснения. API может быть уязвимым для CSRF, если вы используете веб-методы аутентификации для аутентификации API - например, сеансы или куки.

Есть некоторые хорошие детали вВаш Web API подвержен эксплойту CSRF?.

Мой совет по-прежнему относится к пользователям RestKit, поскольку учетные данные пользователей вряд ли будут основаны на сеансах или файлах cookie, а скорее на именах пользователей или API-ключах.

Если ваш API может быть аутентифицирован с помощью сеанса или файлов cookie, вам следует избегать пропуска: verify_authenticity_token и вы должны подумать о переходе на аутентификацию на основе ключей API.

Если ваш API может быть аутентифицирован с использованием имени пользователя и пароля, который также используется для аутентификации в Интернете, все еще существует потенциальный эксплойт, хотя он и менее серьезен, так как потребует от пользователя ввода своего имени пользователя и пароля для вашего сайта в HTTP Auth challenge box при посещении сайта с эксплойтом. Опять же, для лучшей безопасности вы должны подумать о переходе на аутентификацию на основе API-ключей.

Стоит отметить, что я не согласен с тем, что вам нужно добавить:only => [:your_method] для дополнительной защиты, при условии, что у вас есть изолированные контроллеры API, ваш API не смешивается с вашими ответами в Интернете и вы не используете сеанс или файлы cookie. Если они есть, вы можете смело добавлятьskip_before_filter вbase_controller для вашего API.

Error: User Rate Limit Exceededgithub.com/lynndylanhurley/devise_token_auth/issues/343
Error: User Rate Limit Exceededskip_before_filter :verify_authenticity_token, :only => [:your_method]Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededskip_before_filter :verify_authenticity_token :only => [:your_method]
Error: User Rate Limit Exceeded

Похожие вопросы