Django跨站偽造請求保護措施設定方法

2021-07-05 22:23:27 字數 1739 閱讀 7439

一文,僅供學習使用。

在 django 建站中遇到 post 提交表單提示 403 錯誤,發現以 post 方式提交表單會觸發 django 內建的 csrf 保護機制,並且在 403 頁面給出了解決方法,根據提示更改後發現問題依舊,網上查閱很多同學的解決方案均不能解決這個問題,所以到官網上查閱了關於csrf部分的具體設定,最後成功解決了這個問題。

官方csrf部分設定翻譯:

csrf設定步驟:

第一步:在 settings.py 中的 middleware_classes 部分新增'django.middleware.csrf.csrfviewmiddleware',如果使用普通方式建立的 django 專案,這一項一般都已經存在了不用額外設定。如果你不希望加入 csrf 的中介軟體,那麼可以在 views 中的方法上加上 csrf_protect() 裝飾器方法,這一步不是必須設定的,網上有很多人都在啟用了中介軟體的同時也加上了 csrf_protect() 方法,導致問題依舊,官方文件上明確寫到了這一步是【alternatively】。

第二步:在 post 表單的 template 中加入 csrf_token。這一步很簡單,在模板中新增如下**:

需要注意的一點是,表單提交路徑如果是外部鏈結則不需要新增 csrf token 。

第三步:在請求處理方法中新增 context processor。

這一步有兩種方式實現:

方法2:手動新增 csrf 處理(我使用的這一種能成功訪問)。示例**如下:

from django.core.context_processors import csrf  

from django.shortcuts import render_to_response

def my_view(request):

c = {}

c.update(csrf(request))

# ... view code here

return render_to_response("a_template.html", c)

在第一次按照自己的設想將如上**加入到 view 中時,發現問題依舊,後來將前兩行**放置在方法開始位置後,成功解決問題,由此推測該示例**的前兩行只能放在第一次使用 request 物件之前。

django 中使用 ajax 請求的 csrf 設定:

將官方文件上的 ajax 設定照搬下來:

function getcookie(name)   

} }

return cookievalue;

} var csrftoken = getcookie('csrftoken');

function csrfsafemethod(method)

$.ajaxsetup(

} });

這裡使用的是 jquery,於是可以使用 jquery 來正常傳送 ajax 請求,如:

$(document).ready(function(), function(data))  

});

} );

get 請求就不贅述了,同理,本文主要問題在於設定 csrf 說明,使用 django版本為1.4.3,jquery版本為1.8.0

Python django 跨站請求偽造保護

csrf token 用於form表單中,作用是跨站請求偽造保護。如果不用 csrf token 標籤,在用 form 表單時,要再次跳轉頁面會報403許可權錯誤。用了 csrf token 標籤,在 form 表單提交資料時,才會成功。解析 首先,向瀏覽器傳送請求,獲取登入頁面,此時中介軟體 cs...

Django中CSRF(跨站請求偽造)

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

跨站請求偽造

跨站請求偽造 英語 cross site request forgery 是一種挾制使用者在當前已登入的web應用程式上執行非本意的操作的攻擊方法。跟跨 指令碼 xss 相比,xss利用的是使用者對指定 的信任,csrf 利用的是 對使用者網頁瀏覽器的信任。防止方法 1,利用referer判斷,但是...