Отключить токен CSRF в рельсах 3


105

У меня есть приложение rails, которое обслуживает некоторые API для приложения iPhone. Я хочу иметь возможность просто публиковать сообщения на ресурсе, не заботясь о получении правильного токена CSRF. Я пробовал некоторые методы, которые я вижу здесь, в stackoverflow, но, похоже, они больше не работают на рельсах 3.

Спасибо за помощь мне.

Ответы:


175

В контроллере, где вы хотите отключить CSRF, проверьте:

skip_before_action :verify_authenticity_token

Или отключить его для всего, кроме нескольких способов:

skip_before_action :verify_authenticity_token, :except => [:update, :create]

Или отключить только указанные методы:

skip_before_action :verify_authenticity_token, :only => [:custom_auth, :update]

Подробнее: Защита от подделки запросов RoR


1
Это правильный ответ для приложений, в которых есть как обычные формы, доступные в браузере, так и конечные точки API. Ответ Маркуса Проске был бы правильным, если бы вы были абсолютно уверены, что в вашем приложении не будет никаких форм, доступных через браузер.
Асфанд Кази

Куда именно это идет? Что делать, если контроллер является частью какого-то драгоценного камня?
аккаунт

Могу я спросить, можете ли вы ответить на этот очень похожий вопрос? stackoverflow.com/questions/50159847/…

105

В Rails3 вы можете отключить токен csrf в вашем контроллере для определенных методов:

protect_from_forgery :except => :create 

12
Для любого читающего, обратите внимание , что это то , что должно идти в ApplicationController. Ответ Майка Льюиса ниже ( skip_before_filter :verify_authenticity_token) - как отключить его для каждого контроллера, предполагая, что этот контроллер наследуется от ApplicationController.
NudeCanalTroll

Кажется, это небезопасно stackoverflow.com/questions/10676018/… . Что вы думаете? это?
сайты

@NudeCanalTroll, вы имеете в виду, поместив это в контроллер, где я хочу, чтобы он не работал?
BlackDivine

Могу я спросить, можете ли вы ответить на этот очень похожий вопрос? stackoverflow.com/questions/50159847/…

32

В Rails 4 теперь у вас есть возможность писать skip_before_actionвместо skip_before_filter.

# Works in Rails 4 and 5
skip_before_action :verify_authenticity_token

или

# Works in Rails 3 and 4 (deprecated in Rails 4 and removed in Rails 5)
skip_before_filter :verify_authenticity_token

1
Какая разница?
Адам Д. Руппе,

Могу я спросить, можете ли вы ответить на этот очень похожий вопрос? stackoverflow.com/questions/50159847/…

Джон Сэм, когда у меня будет время, я постараюсь это сделать.
jason328
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.