Wyłącz token CSRF w szynach 3


105

Mam aplikację rails, która obsługuje niektóre interfejsy API do aplikacji na iPhone'a. Chcę móc po prostu opublikować post na zasobie, nie myśląc o uzyskaniu prawidłowego tokena CSRF. Wypróbowałem kilka metod, które widzę tutaj w przepływie stosu, ale wygląda na to, że nie działają już na szynach 3.

Dziękuję za pomoc.

Odpowiedzi:


175

W kontrolerze, w którym chcesz wyłączyć CSRF sprawdź:

skip_before_action :verify_authenticity_token

Lub wyłączyć go na wszystko oprócz kilku metod:

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

Lub wyłączyć tylko określone metody:

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

Więcej informacji: RoR Request Forgery Protection


1
To jest poprawna odpowiedź w przypadku aplikacji, które mają połączenie zwykłych formularzy dostępnych w przeglądarce i punktów końcowych interfejsu API. Odpowiedź od Markusa Proske byłaby poprawna, gdybyś był absolutnie pewien, że nie będziesz mieć żadnych formularzy dostępnych w przeglądarce w swojej aplikacji.
Asfand Qazi

Gdzie dokładnie to idzie? Co jeśli kontroler jest częścią jakiegoś klejnotu?
Wyrzuć konto

Czy mogę zapytać, czy możesz odpowiedzieć na to bardzo podobne pytanie? stackoverflow.com/questions/50159847/…

105

W Rails3 możesz wyłączyć token csrf w kontrolerze dla określonych metod:

protect_from_forgery :except => :create 

12
Każdy, kto czyta, powinien pamiętać, że to właśnie powinno się znaleźć ApplicationController. Odpowiedź Mike'a Lewisa poniżej ( skip_before_filter :verify_authenticity_token) to sposób wyłączenia go dla każdego kontrolera, zakładając, że kontroler dziedziczy po ApplicationController.
NudeCanalTroll

Wygląda na to, że jest to niebezpieczne stackoverflow.com/questions/10676018/… . Co myślisz? czy to jest
witryny

@NudeCanalTroll masz na myśli umieszczenie tego w kontrolerze tam, gdzie chcę, aby nie zadziałało?
BlackDivine

Czy mogę zapytać, czy możesz odpowiedzieć na to bardzo podobne pytanie? stackoverflow.com/questions/50159847/…

32

W Rails 4 masz teraz możliwość wpisywania skip_before_actionzamiast skip_before_filter.

# Works in Rails 4 and 5
skip_before_action :verify_authenticity_token

lub

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

1
Co za różnica?
Adam D. Ruppe

Czy mogę zapytać, czy możesz odpowiedzieć na to bardzo podobne pytanie? stackoverflow.com/questions/50159847/…

John Sam, kiedy będę miał czas, spróbuję się do tego zabrać.
jason328
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.