国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

Django跨域請(qǐng)求CSRF的方法示例

2020-01-04 14:05:52
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

web跨域請(qǐng)求

1.為什么要有跨域限制

舉個(gè)例子:

1.用戶登錄了自己的銀行頁(yè)面 http://mybank.com,http://mybank.com向用戶的cookie中添加用戶標(biāo)識(shí)。
2.用戶瀏覽了惡意頁(yè)面 http://evil.com。執(zhí)行了頁(yè)面中的惡意AJAX請(qǐng)求代碼。
3.http://evil.com向http://mybank.com發(fā)起AJAX HTTP請(qǐng)求,請(qǐng)求會(huì)默認(rèn)把http://mybank.com對(duì)應(yīng)cookie也同時(shí)發(fā)送過(guò)去。
4.銀行頁(yè)面從發(fā)送的cookie中提取用戶標(biāo)識(shí),驗(yàn)證用戶無(wú)誤,response中返回請(qǐng)求數(shù)據(jù)。此時(shí)數(shù)據(jù)就泄露了。
5.而且由于Ajax在后臺(tái)執(zhí)行,用戶無(wú)法感知這一過(guò)程。

以上就是所謂是CSRF(Cross-site request forgery)攻擊,跨站請(qǐng)求偽造。接下來(lái)說(shuō)一下 Django中處理csrf的方式

正常情況下直接發(fā)起一個(gè)psot請(qǐng)求,會(huì)報(bào)錯(cuò)。錯(cuò)誤的意思是csrf校驗(yàn)失敗,request請(qǐng)求被丟棄掉。

那么在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', ]

此時(shí)將不會(huì)進(jìn)行csrf的校驗(yàn),但如前面所述,這是一種不安全的行為。而且djano也不推薦使用

解決辦法二:

在前面的提示中有這樣一句話:

<form action="" method="post">{% csrf_token %}

也就是說(shuō)在網(wǎng)頁(yè)中加入csrf_token的標(biāo)簽就可以通過(guò)csrf校驗(yàn)

Django 提供的 CSRF 防護(hù)機(jī)制:

1、django 第一次響應(yīng)來(lái)自某個(gè)客戶端的請(qǐng)求時(shí),會(huì)在服務(wù)器端隨機(jī)生成一個(gè) token,把這個(gè) token 放在 cookie 里。然后每次 POST 請(qǐng)求都會(huì)帶上這個(gè) token,這樣就能避免被 CSRF 攻擊。

2、在返回的 HTTP 響應(yīng)的 cookie 里,django 會(huì)為你添加一個(gè) csrftoken 字段,其值為一個(gè)自動(dòng)生成的 token,在所有的 POST 表單時(shí),必須包含一個(gè) csrfmiddlewaretoken 字段 (只需要在模板里加一個(gè) tag, django 就會(huì)自動(dòng)幫你生成,見(jiàn)下面)

3、在處理 POST 請(qǐng)求之前,django 會(huì)驗(yàn)證這個(gè)請(qǐng)求的 cookie 里的 csrftoken 字段的值和提交的表單里的 csrfmiddlewaretoken 字段的值是否一樣。如果一樣,則表明這是一個(gè)合法的請(qǐng)求,否則,這個(gè)請(qǐng)求可能是來(lái)自于別人的 csrf 攻擊,返回 403 Forbidden.

4、在所有 ajax POST 請(qǐng)求里,添加一個(gè) X-CSRFTOKEN header,其值為 cookie 里的 csrftoken 的值

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到python教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新安县| 平邑县| 雅安市| 建水县| 会同县| 绥滨县| 苍溪县| 左权县| 罗平县| 新蔡县| 塔城市| 邵东县| 光泽县| 阿坝| 虞城县| 和静县| 河北省| 宁阳县| 来凤县| 蕲春县| 堆龙德庆县| 朔州市| 景泰县| 抚远县| 咸宁市| 合肥市| 阳谷县| 乌拉特后旗| 余庆县| 进贤县| 龙井市| 台东市| 射洪县| 琼中| 广水市| 怀来县| 集安市| 泗洪县| 铜陵市| 湘乡市| 泰顺县|