22.-CSRF攻擊
阿新 • • 發佈:2022-01-12
一、CSRF-跨站偽造請求攻擊
某些惡意網站上包含連結、表單按鈕或者JavaScript,它們會利用登入過的使用者在瀏覽器中的認證資訊檢視在你的網站上完成某些操作
這就是跨站請求偽造(CSRF,即Cross-Site Request Forgey)
二、CSRF流程:
第一步:使用者c瀏覽並登入信任的站點A
第二步:A驗證通過,在使用者c瀏覽器產生A的cookie
第三步:使用者c在沒有退出站點A的情況下訪問攻擊網站B
第四步:B要求訪問第三方的站點A,發出一個請求
第五步:使用者瀏覽器根據B網站的請求,攜帶cookie訪問站點A
第六步:A不知道5中的請求是使用者c發出的,還是B發出的,由於瀏覽器會自動帶上使用者C的cookie,所以A會根據使用者C的許可權處理5的請求,這樣B就達到了模擬使用者登入的過程。
三、釣魚網站掉銀行介面騙錢案例
網站業務流程:
釣魚網站搭建一個和銀行一模一樣的網站頁面,你以為是銀行的網站,當你訪問釣魚網站時
釣魚網站向向銀行傳送請求:
四、如何防止csrf攻擊
Django採用‘對比暗號’機制防範攻擊
cookies中儲存暗號1,模版中表單藏著暗號2,使用者只有在本網站下提交資料,暗號2才會隨表單提交給伺服器
Django對比兩個按鈕,對比成功,則認為是合法請求,否則是違法請求-403響應碼
五、CSRF防範配置步驟
如果某個檢視不需要Django進行csrf保護,可以使用裝飾器關閉對此檢視的檢查
1.settings.py中確認MIDDLEWARE(中介軟體)中 Django.middleware.csrf.CsrfViewMiddleware是否開啟
2.模版中,form標籤下新增 {% csrf_token%} 標籤
示例
<form action="/user/login/" method="post" {% csrf_token %}> <p>使用者名稱 :<input type="text" name="username"></p> <p> 密碼:<input type="text" name="password"></p> <p><input type="submit" value="登入"></p> </form>六、區域性不需要進行csrf保護
from django.views.decorators.csrf import csrf_exempt @csrf_exempt def my_view(request): passjust do it .