Django跨域請求CSRF

2021-08-30 06:45:33 字數 1547 閱讀 2233

web跨域請求

1.為什麼要有跨域限制

舉個例子:

1.使用者登入了自己的銀行頁面 向使用者的cookie中新增使用者標識。

2.使用者瀏覽了惡意頁面 執行了頁面中的惡意ajax請求**。

3.向發起ajax http請求,請求會預設把對應cookie也同時傳送過去。

4.銀行頁面從傳送的cookie中提取使用者標識,驗證使用者無誤,response中返回請求資料。此時資料就洩露了。

5.而且由於ajax在後台執行,使用者無法感知這一過程。

以上就是所謂是csrf(cross-site request forgery)攻擊,跨站請求偽造。接下來說一下 django中處理csrf的方式

正常情況下直接發起乙個psot請求,會報錯。錯誤的意思是csrf校驗失敗,request請求被丟棄掉。

那麼在django中的post失敗有兩種解決辦法:

解決辦法一:將csrf中間層注釋掉

middleware = [

'django.middleware.security.securitymiddleware',

'django.contrib.sessions.middleware.sessionmiddleware',

'django.middleware.common.commonmiddleware',

#    'django.middleware.csrf.csrfviewmiddleware',

'django.contrib.auth.middleware.authenticationmiddleware',

'django.contrib.messages.middleware.messagemiddleware',

'django.middleware.clickjacking.xframeoptionsmiddleware',

]

也就是說在網頁中加入csrf_token的標籤就可以通過csrf校驗

django 提供的 csrf 防護機制:

1、django 第一次響應來自某個客戶端的請求時,會在伺服器端隨機生成乙個 token,把這個 token 放在 cookie 裡。然後每次 post 請求都會帶上這個 token,這樣就能避免被 csrf 攻擊。

2、在返回的 http 響應的 cookie 裡,django 會為你新增乙個 csrftoken 字段,其值為乙個自動生成的 token,在所有的 post 表單時,必須包含乙個 csrfmiddlewaretoken 字段 (只需要在模板裡加乙個 tag, django 就會自動幫你生成,見下面)

3、在處理 post 請求之前,django 會驗證這個請求的 cookie 裡的 csrftoken 欄位的值和提交的表單裡的 csrfmiddlewaretoken 欄位的值是否一樣。如果一樣,則表明這是乙個合法的請求,否則,這個請求可能是來自於別人的 csrf 攻擊,返回 403 forbidden.

4、在所有 ajax post 請求裡,新增乙個 x-csrftoken header,其值為 cookie 裡的 csrftoken 的值

django跨域請求

在介面函式中配置 安裝cors pip install django cors headers corsheaders 新增中介軟體 middleware or middleware classes on django 1.10 corsheaders.middleware.corsmiddlewa...

django專案之csrf跨域問題

問題 forbidden csrf token missing or incorrect.原因 django,會對合法的跨域訪問做這樣的檢驗,cookies裡面儲存的 csrftoken 和post的header裡面的字段 x csrftoken 作比較,只有兩者匹配,才能通過跨域檢驗。否則會返回這...

Django中CSRF(跨站請求偽造)

簡介 django為使用者實現防止跨站請求偽造的功能,通過中介軟體 django.middleware.csrf.csrfviewmiddleware 來完成。而對於django中設定防跨站請求偽造功能有分為全域性和區域性。全域性 中介軟體 django.middleware.csrf.csrfvi...