Miałem ten sam problem, ale ze stronami, które były buforowane. Strony były buforowane nieaktualnym tokenem autentyczności, a wszystkie akcje przy użyciu metod post / put / delete, gdzie rozpoznano próby fałszerstwa. Użytkownik zwrócił błąd (422 Unprocessable Entity).
Rozwiązanie dla Rails 3:
Dodaj:
skip_before_filter :verify_authenticity_token
lub jak "sagivo" wskazano w Rails 4 dodaj:
skip_before_action :verify_authenticity_token
Na stronach obsługujących buforowanie.
Jak @toobulkeh skomentował to nie jest luka na :index
, :show
działań, ale uważaj na ten użyciem :put
, :post
działań.
Na przykład:
caches_page :index, :show
skip_before_filter :verify_authenticity_token, :only => [:index, :show]
Źródła: http://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection/ClassMethods.html
Uwaga dodana przez barlop- Rails 4.2 przestarzałe skip_before_filter na rzecz skip_before_action https://guides.rubyonrails.org/4_2_release_notes.html "Rodzina metod * _filter została usunięta z dokumentacji. Odradza się ich używanie na rzecz * _action rodzina metod "
W przypadku Rails 6 (jak wskazał "collimarco") możesz go używać skip_forgery_protection
i że jest to bezpieczne w przypadku REST API, które nie używa danych sesji.