十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
什么是CSRF
瀏覽器在發(fā)送請求的時(shí)候,會(huì)自動(dòng)帶上當(dāng)前域名對應(yīng)的cookie內(nèi)容,發(fā)送給服務(wù)端,不管這個(gè)請求是來源A網(wǎng)站還是其它網(wǎng)站,只要請求的是A網(wǎng)站的鏈接,就會(huì)帶上A網(wǎng)站的cookie。瀏覽器的同源策略并不能阻止CSRF攻擊,因?yàn)闉g覽器不會(huì)停止js發(fā)送請求到服務(wù)端,只是在必要的時(shí)候攔截了響應(yīng)的內(nèi)容。或者說瀏覽器收到響應(yīng)之前它不知道該不該拒絕。
攻擊過程
用戶登陸A網(wǎng)站后,攻擊者自己開發(fā)一個(gè)B網(wǎng)站,這個(gè)網(wǎng)站會(huì)通過js請求A網(wǎng)站,比如用戶點(diǎn)擊了某個(gè)按鈕,就觸發(fā)了js的執(zhí)行。
防止攻擊
攻擊者是利用cookie隨著http請求發(fā)送的特性來攻擊。但攻擊者不知道 cookie里面是什么。
Django中是在表單中加一個(gè)隱藏的 csrfmiddlewaretoken,在提交表單的時(shí)候,會(huì)有 cookie 中的內(nèi)容做比對,一致則認(rèn)為正常,不一致則認(rèn)為是攻擊。由于每個(gè)用戶的 token 不一樣,B網(wǎng)站上的js代碼無法猜出token內(nèi)容,對比必然失敗,所以可以起到防范作用。
和上面的類似,但不使用 cookie,服務(wù)端的數(shù)據(jù)庫中保存一個(gè) session_csrftoken,表單提交后,將表單中的 token 和 session 中的對比,如果不一致則是攻擊。
這個(gè)方法實(shí)施起來并不困難,但它更安全一些,因?yàn)榫W(wǎng)站即使有 xss 攻擊,也不會(huì)有泄露token的問題。
Django使用CsrfViewMiddleware中間件進(jìn)行CSRF校驗(yàn),默認(rèn)開啟防止csrf(跨站點(diǎn)請求偽造)攻擊,在post請求時(shí),沒有攜帶csrf字段,導(dǎo)致校驗(yàn)失敗,報(bào)403錯(cuò)誤。那么我們?nèi)绾谓鉀Q這種403錯(cuò)誤呢?
解決方法
1. 去掉項(xiàng)目的CSRF驗(yàn)證
注釋掉此段代碼即可,但是不推薦此方式,將導(dǎo)致我們的網(wǎng)站完全無法防止CSRF攻擊。
2. 前端表單中增加csrf信息
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。