У мене був той самий випуск, але зі сторінками, які були кешовані. Сторінки отримують буферизований маркер автентичності та всі дії за допомогою методів "поставити / поставити / видалити", якщо їх визнано спробами підробки. Помилка (422 Unprocessable Entity) повернуто користувачеві.
Рішення для Rails 3:
Додати:
skip_before_filter :verify_authenticity_token
або як "sagivo", зазначене в Rails 4, додають:
skip_before_action :verify_authenticity_token
На сторінках, які виконують кешування.
Як @toobulkeh прокоментував це не вразливість в :index
, :show
діях, але остерігайтеся використовувати це на :put
, :post
дій.
Наприклад:
caches_page :index, :show
skip_before_filter :verify_authenticity_token, :only => [:index, :show]
Довідка: http://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection/ClassMethods.html
Примітка, додана barlop- Ралі 4.2, застарілий skip_before_filter на користь skip_beforecturing https://guides.rubyonrails.org/4_2_release_notes.html "Сімейство методів * _фільтру вилучено з документації. Їх використання перешкоджає на користь * _action сім'я методів "
Для Rails 6 (як "collimarco" вказував) ви можете використовувати skip_forgery_protection
та безпечно використовувати його для REST API, який не використовує дані сеансу.