Django中CSRF防護原理及使用

Django中CSRF防護原理及使用

分類:

django為用戶實現(xiàn)防止跨站請求偽造的功能,通過中間件 django.middleware.csrf.CsrfViewMiddleware 來完成床三。而對于django中設(shè)置防跨站請求偽造功能有分為全局和局部。

全局:

中間件 django.middleware.csrf.CsrfViewMiddleware

局部:

@csrf_protect蜡吧,為當前函數(shù)強制設(shè)置防跨站請求偽造功能,即便settings中沒有設(shè)置全局中間件。

@csrf_exempt卷中,取消當前函數(shù)防跨站請求偽造功能盾似,即便settings中設(shè)置了全局中間件敬辣。

Django中CSRF防護原理:

在用戶訪問django的可信站點時,django反饋給用戶的表單中有一個隱含字段csrftoken零院,這個值是在服務(wù)器端隨機生成的溉跃,每一次提交表單都會生成不同的值。當用戶提交django的表單時告抄,服務(wù)器校驗這個表單的csrftoken是否和自己保存的一致撰茎,來判斷用戶的合法性。當用戶被csrf攻擊從其他站點發(fā)送精心編制的攻擊請求時打洼,由于其他站點不可能知道隱藏的csrftoken字段的信息這樣在服務(wù)器端就會校驗失敗龄糊,攻擊被成功防御,這樣就能避免被 CSRF 攻擊拟蜻。

在返回的 HTTP 響應(yīng)的 cookie 里绎签,django 會為你添加一個 csrftoken 字段,其值為一個自動生成的 token

在所有的 POST 表單時酝锅,必須包含一個 csrfmiddlewaretoken 字段 (只需要在模板里加一個 tag诡必, django 就會自動幫你生成,見下面)

在處理 POST 請求之前,django 會驗證這個請求的 cookie 里的 csrftoken 字段的值和提交的表單里的 csrfmiddlewaretoken 字段的值是否一樣爸舒。如果一樣蟋字,則表明這是一個合法的請求,否則扭勉,這個請求可能是來自于別人的 csrf 攻擊鹊奖,返回 403 Forbidden.

在所有 ajax POST 請求里,添加一個 X-CSRFTOKEN header涂炎,其值為 cookie 里的 csrftoken 的值

Django中使用 CSRF 防護

GET 請求不要用有副作用忠聚。任何處理 GET 請求的代碼對資源的訪問都一定要是“只讀“的。

啟用 django.middleware.csrf.CsrfViewMiddleware 中間件

使用POST 表單元素時唱捣,加上{% csrf_token %}

渲染模塊使用 RequestContext两蟀。RequestContext 會處理 csrf_token , 從而自動為表單添加一個名為 csrfmiddlewaretoken 的 input

Django中CSRF防護解析:

csrftoken的生成方式如下:

md5_constructor("%s%s"% (randrange(0, _MAX_CSRF_KEY), settings.SECRET_KEY)).hexdigest()

1

設(shè)置csrftoken:

response.set_cookie(settings.CSRF_COOKIE_NAME,request.META["CSRF_COOKIE"], max_age =60*60*24*7*52, domain=settings.CSRF_COOKIE_DOMAIN)

1

csrftoken與cookie中的token比較:

ifnotconstant_time_compare(request_csrf_token, csrf_token):對于前后端分離的 ajax 去調(diào)用的話? 需要在傳遞的參數(shù)里帶上? ? csrfmiddlewaretoken: "{{ csrf_token }}"

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市震缭,隨后出現(xiàn)的幾起案子赂毯,更是在濱河造成了極大的恐慌,老刑警劉巖拣宰,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件党涕,死亡現(xiàn)場離奇詭異,居然都是意外死亡巡社,警方通過查閱死者的電腦和手機膛堤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來晌该,“玉大人骑祟,你說我怎么就攤上這事∑希” “怎么了?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵怯晕,是天一觀的道長潜圃。 經(jīng)常有香客問我,道長舟茶,這世上最難降的妖魔是什么谭期? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮吧凉,結(jié)果婚禮上隧出,老公的妹妹穿的比我還像新娘。我一直安慰自己阀捅,他們只是感情好胀瞪,可當我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般凄诞。 火紅的嫁衣襯著肌膚如雪圆雁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天帆谍,我揣著相機與錄音伪朽,去河邊找鬼。 笑死汛蝙,一個胖子當著我的面吹牛烈涮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播窖剑,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼坚洽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了苛吱?” 一聲冷哼從身側(cè)響起酪术,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎翠储,沒想到半個月后绘雁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡援所,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年庐舟,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片住拭。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡挪略,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出滔岳,到底是詐尸還是另有隱情杠娱,我是刑警寧澤,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布谱煤,位于F島的核電站摊求,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏刘离。R本人自食惡果不足惜室叉,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望硫惕。 院中可真熱鬧茧痕,春花似錦、人聲如沸恼除。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至埃脏,卻和暖如春搪锣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背彩掐。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工构舟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人堵幽。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓狗超,卻偏偏與公主長得像,于是被迫代替她去往敵國和親朴下。 傳聞我的和親對象是個殘疾皇子努咐,可洞房花燭夜當晚...
    茶點故事閱讀 44,654評論 2 354

推薦閱讀更多精彩內(nèi)容