CSRF 情況:
-
瀏覽器如果發送請求時,如果在瀏覽器的cookie紀錄裡面有找到目標Domain的對應的cookie,就會將這個cookie一同送給server做請求
-
但是如果使用者在A網站已經認證完,且session尚未timeout
-
這個如果使用者在瀏覽B網站時,B網站自動發送一個請求給A網站
-
A網站會認為是使用者自己發送的
-
如此可以達到偽裝使用者在A網站的所有操作
對策:
-
use GET and POST appropriately
就是正確的使用Get和Post, 如果是獲取資料的地方就使用GET, 需要更新或是新增的地方就使用POST
-
a security token in non-GET requests will protect your application from CSRF.
如果是GET以外的行為例如: POST, 這時就必需使用一個認證碼來驗證次動作
實作的方法通常就是, 當使用者獲取一個更新操作或是新增頁面的時候, Server會自動產生一個驗證碼(security token)並將它同時 和這個更新操作或是新增頁面同時送到使用者的瀏覽器
使用者要進行新增或是更新時會POST資料到Server,同時POST的資料裡面會跟隨這個驗證碼(security token)一起送到Server, 所以Server就根據這個驗證碼的正確與否來決定這個POST的行為是正確的還是偽造的