电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

解決Django提交表單報錯:CSRF token missing or incorrect的問題

瀏覽:9日期:2024-10-21 08:33:17

1、在Django提交表單時報錯:Django提交表單報錯:

CSRF token missing or incorrect

具體報錯頁面如下:

解決Django提交表單報錯:CSRF token missing or incorrect的問題

2、有道詞典翻譯后如下:

通常,當存在真正的跨站點請求偽造時,或者Django的CSRF機制沒有被正確使用時,就會出現這種情況。至于郵遞表格,你須確保:

您的瀏覽器正在接受cookie。

視圖函數將一個請求傳遞給模板的呈現方法。

在模板中,每個POST表單中都有一個{% csrf_token %}模板標記,目標是一個內部URL。

如果您沒有使用CsrfViewMiddleware,那么您必須在任何使用csrf_token模板標簽的視圖以及那些接受POST數據的視圖上使用csrf_protect。

該表單有一個有效的CSRF令牌。在登錄另一個瀏覽器選項卡或登錄后單擊back按鈕之后,您可能需要使用表單重新加載頁面,因為登錄后令牌會旋轉。

您將看到這個頁面的幫助部分,因為在Django設置文件中有DEBUG = True。將其更改為False,將只顯示初始錯誤消息。

您可以使用CSRF_FAILURE_VIEW設置自定義這個頁面。

3、解決辦法:

(1)、確定項目底下的settings.py文件,是否存在django.middleware.csrf.CsrfViewMiddleware:

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’,]

(2)、如果確定settings.py文件有配置了,還是報錯,就要在form表單底下加一行代碼:

{% csrf_token %}

這樣應該就不會報上面錯誤了,以上內容僅供學習參考,謝謝!

補充知識:Django中csrf token驗證原理

我多年沒維護的博客園,有一篇初學Django時的筆記,記錄了關于django-csrftoekn使用筆記,當時幾乎是照抄官網的使用示例,后來工作全是用的flask。博客園也沒有維護。直到我的博客收到了如下評論,確實把我給問倒了,而且我也仔細研究了這個問題。

1. Django是怎么驗證csrfmiddlewaretoken合法性的?

2. 每次刷新頁面的時候<input>中的csrf的value都會更新,每次重復登錄的時候cookie的csrf令牌都會刷新,那么這兩個csrf-token有什么區別?

解決Django提交表單報錯:CSRF token missing or incorrect的問題

image.pngCSRF(Cross Site Request Forgery protection),中文簡稱跨站請求偽造。

django 第一次響應來自某個客戶端的請求時,會在服務器端隨機生成一個 token,把這個 token 放在 cookie 里。然后每次 POST 請求都會帶上這個 token,這樣就能避免被 CSRF 攻擊。

這樣子看起來似乎沒毛病,但是評論中的第三個問題,每次刷新頁面,form表單中的token都會刷新,而cookie中的token卻只在每次登錄時刷新。我對csrftoken的驗證方式起了疑問,后來看了一段官方文檔的解釋。

When validating the ‘csrfmiddlewaretoken’ field value, only the secret, not the full token, is compared with the secret in the cookie value. This allows the use of ever-changing tokens. While each request may use its own token, the secret remains common to all.This check is done by CsrfViewMiddleware.

官方文檔中說到,檢驗token時,只比較secret是否和cookie中的secret值一樣,而不是比較整個token。

我又有疑問了,同一次登錄,form表單中的token每次都會變,而cookie中的token不便,django把那個salt存儲在哪里才能保證驗證通過呢。

直到看到源碼。

def _compare_salted_tokens(request_csrf_token, csrf_token): # Assume both arguments are sanitized -- that is, strings of # length CSRF_TOKEN_LENGTH, all CSRF_ALLOWED_CHARS. return constant_time_compare( _unsalt_cipher_token(request_csrf_token), _unsalt_cipher_token(csrf_token), )def _unsalt_cipher_token(token): ''' Given a token (assumed to be a string of CSRF_ALLOWED_CHARS, of length CSRF_TOKEN_LENGTH, and that its first half is a salt), use it to decrypt the second half to produce the original secret. ''' salt = token[:CSRF_SECRET_LENGTH] token = token[CSRF_SECRET_LENGTH:] chars = CSRF_ALLOWED_CHARS pairs = zip((chars.index(x) for x in token), (chars.index(x) for x in salt)) secret = ’’.join(chars[x - y] for x, y in pairs) # Note negative values are ok return secret

token字符串的前32位是salt, 后面是加密后的token, 通過salt能解密出唯一的secret。

django會驗證表單中的token和cookie中token是否能解出同樣的secret,secret一樣則本次請求合法。

同樣也不難解釋,為什么ajax請求時,需要從cookie中拿取token添加到請求頭中。

網上有不少關于django csrf token驗證原理的文章都是錯的,是因為他們根本不知道csrf-token的結構組成,我也是卡在第三條評論那.然后看了官方文檔,和CsrfViewMiddleware中間件源碼然后才恍然大悟。

以上這篇解決Django提交表單報錯:CSRF token missing or incorrect的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Django
相關文章:
主站蜘蛛池模板: 干洗加盟网-洗衣店品牌排行-干洗设备价格-干洗连锁加盟指南 | 硬质合金模具_硬质合金非标定制_硬面加工「生产厂家」-西迪技术股份有限公司 | 数码听觉统合训练系统-儿童感觉-早期言语评估与训练系统-北京鑫泰盛世科技发展有限公司 | 大型多片锯,圆木多片锯,方木多片锯,板材多片锯-祥富机械有限公司 | 不锈钢监控杆_监控立杆厂家-廊坊耀星光电科技有限公司 | 意大利Frascold/富士豪压缩机_富士豪半封闭压缩机_富士豪活塞压缩机_富士豪螺杆压缩机 | 蜘蛛车-高空作业平台-升降机-高空作业车租赁-臂式伸缩臂叉装车-登高车出租厂家 - 普雷斯特机械设备(北京)有限公司 | 螺旋压榨机-刮泥机-潜水搅拌机-电动泥斗-潜水推流器-南京格林兰环保设备有限公司 | 裹包机|裹膜机|缠膜机|绕膜机-上海晏陵智能设备有限公司 | 气体检测仪-氢气检测仪-可燃气体传感器-恶臭电子鼻-深国安电子 | 全自动烧卖机厂家_饺子机_烧麦机价格_小笼汤包机_宁波江北阜欣食品机械有限公司 | 高尔夫球杆_高尔夫果岭_高尔夫用品-深圳市新高品体育用品有限公司 | 柴油发电机组_柴油发电机_发电机组价格-江苏凯晨电力设备有限公司 | 红外光谱仪维修_二手红外光谱仪_红外压片机_红外附件-天津博精仪器 | 臭氧实验装置_实验室臭氧发生器-北京同林臭氧装置网 | 北京企业宣传片拍摄_公司宣传片制作-广告短视频制作_北京宣传片拍摄公司 | 南京和瑞包装有限公司| 成都思迪机电技术研究所-四川成都思迪编码器 | 400电话_400电话申请_866元/年_【400电话官方业务办理】-俏号网 3dmax渲染-效果图渲染-影视动画渲染-北京快渲科技有限公司 | MVR蒸发器厂家-多效蒸发器-工业废水蒸发器厂家-康景辉集团官网 | 安徽集装箱厂-合肥国彩钢结构板房工程有限公司 | 食品无尘净化车间,食品罐装净化车间,净化车间配套风淋室-青岛旭恒洁净技术有限公司 | 定时排水阀/排气阀-仪表三通旋塞阀-直角式脉冲电磁阀-永嘉良科阀门有限公司 | 卧涛科技有限公司科技项目申报公司|高新技术企业申报|专利申请 | 蚂蚁分类信息系统 - PHP同城分类信息系统 - MayiCMS | 国标白水泥,高标号白水泥,白水泥厂家-淄博华雪建材有限公司 | 丝杆升降机-不锈钢丝杆升降机-非标定制丝杆升降机厂家-山东鑫光减速机有限公司 | 苏州注册公司_苏州代理记账_苏州工商注册_苏州代办公司-恒佳财税 | 盛源真空泵|空压机-浙江盛源空压机制造有限公司-【盛源官网】 | 包装设计公司,产品包装设计|包装制作,包装盒定制厂家-汇包装【官方网站】 | 上海冠顶工业设备有限公司-隧道炉,烘箱,UV固化机,涂装设备,高温炉,工业机器人生产厂家 | 便民信息网_家电维修,家电清洗,开锁换锁,本地家政公司 | 一航网络-软件测评官网| 龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司_龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司 | 甲级防雷检测仪-乙级防雷检测仪厂家-上海胜绪电气有限公司 | 美国PARKER齿轮泵,美国PARKER柱塞泵,美国PARKER叶片泵,美国PARKER电磁阀,美国PARKER比例阀-上海维特锐实业发展有限公司二部 | 三效蒸发器_多效蒸发器价格_四效三效蒸发器厂家-青岛康景辉 | 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | 书信之家_书信标准模板范文大全 最新范文网_实用的精品范文美文网 | 合肥花魁情感婚姻咨询中心_挽回爱情_修复婚姻_恋爱指南 | 康明斯发电机,上柴柴油发电机,玉柴柴油发电机组_海南重康电力官网 |