csrf/xsrf(cross-site request forgery),即跨站請求僞造,也被稱為“one click attack”或者session riding。基本原理是通過僞裝來自受信任使用者的請求來利用受信任的網站。
×××原理:
如圖所示,使用者首先通路網站a,通過登入身份驗證成功,網站a下發cookie儲存在使用者的浏覽器中。使用者又去通路了網站b,網站b在下發使用者頁面的時候會有一個引誘點選,這個引誘點選一般是一個連結,這個連結一般指向網站a的一個存在漏洞的api接口,尤其這個api接口是get類型。當使用者禁不住誘惑點選了這個引誘點選,這個點選就通路到了a網站,此時浏覽器就會自動上傳cookie,此時網站a對cookie進行确認,發現是合法使用者,此時就會執行這個api的動作(以前微網誌就出現過csrf×××,出問題的接口導緻很多情況多了很多關注)。
總結
csrf能造成×××的原理:
使用者登入過網站a。
網站a中某一個接口存在着這種漏洞。這兩條件缺一不可。
防禦措施
1.token驗證
×××原理中通路漏洞接口的時候浏覽器隻上傳了cookie,沒有手動的上傳一個token。這個token是使用者登入注冊甚至隻是通路網站a,伺服器會自動向使用者本地存儲一個token,在使用者通路各個接口的時候,如果沒帶這個token,伺服器就不會通過驗證。是以當使用者點選引誘連結,這個連結隻會自動攜帶cookie,但是不會自動攜帶token,這樣就能避免×××。
2.referer驗證
referer,即頁面來源。伺服器通過判斷頁面來源是不是自己站點的頁面來源,如果是就執行接口動作,如果不是一律攔截。這樣也能避免×××。
3.隐藏令牌
類似于token驗證,原理是把token放在http頭的自定義屬性中,而不是把資訊放在連結上,增加了隐蔽性。本質上和token驗證沒什麼差別,隻是用法上的一些差別。