CSRF繞過後端Referer校驗分正常情況和不正常的情況,我們這裡主要讨論開發在寫校驗referer程式時,不正常的情況下怎麼進行繞過。
正常情況
正常的情況指伺服器端校驗Referer的代碼沒毛病,那麼意味着前端是無法繞過的。
我之前考慮過的方案:
JS修改Referer,失敗;
讓使用者點選第三方網站,但是浏覽器就是使用第三方網站的referer,失敗;
不正常的情況
不正常的情況指伺服器端校驗Referer的代碼有漏洞,前端才能做到繞過,下面介紹幾個可能會繞過Referer的案例;
添加無Referer标簽
可以嘗試無Referer标簽,萬一邏輯剛好沒判斷無Referer的情況呢;
history.pushState('', '', '/')
Web站點路徑帶着referer字段名
原理就是在惡意網站的通路路徑上建立成包含原本referer中有的字段名,如果服務端的校驗規則隻是判斷是否包含,那就666了;

GET型CSRF
檢驗了HTTP Referer就一點問題都沒有了嗎?答案是:否定的,HTTP Referer隻能檢查點選的連結來源是來自站内還是站外,如果是GET方式的CSRF,那連結本身就是站内的,也就意味着檢驗HTTP Referer是無效的。
原文出處:https://www.cnblogs.com/mysticbinary/p/12161537.html