什麼是CSRF

Cross-site Request Forgery(簡稱CSRF),意思是跨站請求偽造。原理是利用網站服務器對瀏覽器的信任,通過一些技術手段欺騙用戶的瀏覽器訪問自己曾經認證過的網站,並執行一些危害用戶利益的操作。

例如,假設網站的會話信息保存在cookie中,提現的請求是GET http://www.sample.com/withdraw?toCard=123456&amount=10000,攻擊者在自己的網頁中通過img標籤、iframe或者AJAX訪問這個鏈接,並誘使用戶訪問這個網頁,如果用戶剛剛登錄過sample.com,餘額就會被轉走。

防止CSRF的方法

CSRF的關鍵在於用戶的鑒權信息保存在cookie中,或攻擊者可以拿到它。目前防止CSRF攻擊的方法主要有兩種:JWT和表單校驗token。

JWT的token通過HTTP請求的header傳遞,且由於瀏覽器的跨站限制,釣魚網頁中的JS無法拿到token,從而達到防止CSRF的目的。關於JWT更詳細的介紹在「JSON Web Token簡介」。

表單校驗token通常是存儲在表單的隱藏字段中的一個隨機字符串,服務器端通過比對表單提交的token判斷請求是否偽造,此時需要注意服務器端的CORS配置,即便在有需要的情況下開放了,也應該嚴格限制允許的HTTP方法和域,否則,釣魚網頁的JS就可以拿到這個token,從而實現CSRF。