Я внедряю приложение Rails 4 с API. Я хочу иметь возможность вызывать API с мобильных телефонов и сам webapp. Я встретил эту заметку, исследуя protect_from_forgery
:
Важно помнить, что запросы XML или JSON также затронуты, и если вы создаете API, вам понадобится что-то вроде:
class ApplicationController < ActionController::Base
protect_from_forgery
skip_before_action :verify_authenticity_token, if: :json_request?
protected
def json_request?
request.format.json?
end
end
Я думал об этом, но у меня есть некоторые оговорки/вопросы:
- Это решение, похоже, закрывает отверстие CSRF, потому что теперь злоумышленник может создать ссылку с javascript
onclick
, который помещает JSON? - Будет ли проверка маркера API разумной заменой? то есть, если вместо того, чтобы пропустить проверку подлинности, разрешить ей сбой проверки и восстановления в
handle_unverified_request
, если токен api присутствует и исправлен для текущего пользователя? - Или, может быть, я должен просто сделать webapp и мобильные устройства отправить токен CSRF в заголовках HTTP? Это безопасно? Как мобильный телефон даже получит токен CSRF, учитывая, что он не передает HTML-формы?
Изменить для пояснения:
Я больше беспокоюсь о том, что пользователь webapp нажал на созданную ссылку CSRF. Мобильные пользователи аутентифицированы, авторизованы, имеют ключ API, поэтому я не беспокоюсь о них. Но, включив защиту CSRF для пользователей Webapp, мобильные пользователи заблокированы от использования защищенного API. Я хочу знать правильную стратегию для этого, и я не верю, что документация Rails дает правильный ответ.