over 4 years ago

所謂的authenticity_token就是一串隨機生成的string,在我們建立rails的表單時,rails將會隨機生成一個authenticity_token存在session中,並且在表單的hidden field中也加入一樣的authenticity_token,當我們送出表單(post request)時,rails會驗證表單的authenticity_token和session中的authenticity_token是否一樣,一樣才可以成功送出。

這樣做的好處是可以避免所謂的跨站請求偽造(Cross-site Request Forgery),又稱CSRF。
CSRF攻擊的原理是偽造一個form送post給伺服器,所以很有可能發生的情況是你在A網站有登入使用者,但是在B網站點了帶有CSRF code的連結,內容是要重新設定A網站的使用者密碼為12345678,此時A網站以為是你自己送出的請求,那麼你的密碼就被換掉了。

而rails加上了authenticity_token這樣的機制就是為了阻擋CSRF,因為B網站不會知道你的authenticity_token是什麼,送出的post request就會被擋下來。在rails中預設會檢查POST, PUT, DELETE requests的authenticity_token。

參考資料:
http://stackoverflow.com/questions/941594/understand-rails-authenticity-token

← Rails Mailer Rails Add Index →
 
comments powered by Disqus