Saya memiliki masalah yang sama tetapi dengan halaman yang di-cache halaman. Halaman mendapat buffered dengan token keaslian basi dan semua tindakan menggunakan metode post / put / delete yang diakui sebagai upaya pemalsuan. Kesalahan (422 Entitas yang tidak dapat diproses) dikembalikan ke pengguna.
Solusi untuk Rails 3:
Tambahkan:
skip_before_filter :verify_authenticity_token
atau seperti yang "sagivo" tunjukkan di Rails 4 tambahkan:
skip_before_action :verify_authenticity_token
Pada halaman yang melakukan caching.
Sebagai @toobulkeh berkomentar ini bukan kerentanan pada :index
, :show
tindakan, tapi berhati-hatilah menggunakan ini pada :put
, :post
tindakan.
Sebagai contoh:
caches_page :index, :show
skip_before_filter :verify_authenticity_token, :only => [:index, :show]
Referensi: http://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection/ClassMethods.html
Catatan ditambahkan oleh barlop- Rails 4.2 usang skip_before_filter yang mendukung skip_before_action https://guides.rubyonrails.org/4_2_release_notes.html "Metode keluarga * _filter telah dihapus dari dokumentasi. Penggunaannya tidak disarankan untuk mendukung * _action. keluarga metode "
Untuk Rails 6 (seperti yang ditunjukkan "collimarco") Anda dapat menggunakan skip_forgery_protection
dan aman untuk menggunakannya untuk REST API yang tidak menggunakan data sesi.