1. 釣魚網站的頁面和正經網站的頁面對瀏覽器來說有什麼區別? (頁面是怎麼來的?)
釣魚網站的頁面是由 釣魚網站的服務端給你返回的
正經網站的網頁是由 正經網站的服務端給你返回的
2。釣魚網站進行csrf的過程:
用戶訪問了釣魚網站,並通過釣魚網站給正經網站的服務端發送了請求,(例如在轉賬請求,釣魚網站修改了轉入賬戶,然後發送給了正經網站的服務端)
正經網站的服務端未能識別出這個一個虛假的請求,而是直接進行了處理,從而轉賬成功
解決方案:在正經網站加入校驗字符(該字符釣魚網站獲取不了),使得正經網站的服務端能夠識別是否是正經網站傳來的請求
正經網站的請求頁面,端口號爲8000:
正經網站的服務端:
釣魚網站仿照了正經網站的頁面,並給正經網站的服務端發送了請求且篡改了轉入賬戶:
釣魚網站的頁面,端口號爲8888:
當釣魚網站給正經網站的服務端發出請求時,正經網站的服務端未能辨別出這是一個虛假的網站,從而對請求進行了處理
解決方案:在正經網站加入校驗字符(該字符釣魚網站獲取不了),使得正經網站的服務端能夠識別是否是正經網站傳來的請求
Django中內置了一個專門處理csrf問題的中間件
django.middleware.csrf.CsrfViewMiddleware(在setting中)
這個中間件做的事情:
1. 在render返回頁面的時候,在頁面中塞了一個隱藏的input標籤
用法:
我們在頁面上 form表單 裏面 寫上 {% csrf_token %}
網頁中翻譯爲<input type="hidden" name="csrfmiddlewaretoken" value="8gthvLKulM7pqulNl2q3u46v1oEbKG7BSwg6qsHBv4zf0zj0UcbQmpbAdijqyhfE">
2. 當你提交POST數據的時候,它幫你做校驗,如果校驗不通過就拒絕這次請求
settings配置中:
csrf在網頁中則翻譯爲一串字符串
此時釣魚網站在發出請求時,則被正經網站的服務端拒絕: