前言:
CSRF (Cross Site Request Forgery),中文稱:跨站請求攻擊。攻擊者通過建構網站後台某個功能接口的請求地址,設法讓用户點擊連結或者腳本的方式讓請求地址自動加載。
攻擊者怎樣攻擊?
用户登錄原網站,瀏覽器會記錄Cookies ,如果用户未登出或Cookies並未過期(用户關閉瀏覽器不代表網站已登出或Cookies會立即過期)。在這期間,如果用户造訪其他危險網站,點擊了攻擊者的連結,便會向原網站發出某個功能請求,原網站的伺服器接收後會被誤會以為是用户合法操作。
為何會有漏洞?
一般是網站採用 GET 形式去發出請求,讓攻擊者輕易知道網站向後台的請求方式。令攻擊者按照其方式,建構網站後台某個功能接口的請求地址。在你點擊擊攻擊者的連結前,由於你已登錄過原網站。而攻擊者的連結會向原網站發出請求,你的瀏覽器會帶上你原網站的 Cookie 發出 GET 形式的請求去執行請求,原網站的伺服器接收後會被誤會以為是用户合法操作。
即使改用 POST 形式的接口也不是絕對安全,因為攻擊者可以利用腳本去獲得 POST 形式提交的參數頁面。
如何預防?
在於用户,應該:
- 登錄網站後,使用完畢後緊記登出。
- 登錄網站期間,避免瀏覽其他網站或圖片,表單及文字等連結點擊。
- 避免瀏覽其他不明來歷網站或點擊不明來歷圖片,表單及文字等連結。
- 避免在瀏覽器儲存帳户名稱或密碼
在於開發人員,應該:
- 從伺服器進行預防
- 在頁面表單中加上CSRF token 在頁面表單中加上一個
<input type="hidden">
,並設定名name =csrftoken
,value=""
填的值由 server 隨機產生,並存在 server 的 session 中。
<input type="hidden" name="csrftoken" value="tergf1dgkjeirg"/>
按提交之後,伺服器會核對表單中的csrftoken
與自己 session 裏面存的是否一致,若是則代表由使用者本人發出的請求。
- 還有其他的預防方式可參考:
總結:
本文是小弟學習前端寫有關於簡述:CSRF 攻擊是什麼?,請大家多多指教。如有任何意見及交流,可在下方留言,謝謝!