今天,我将与您分享Django如何禁用CSRF的知识。其中,它还将解释闭幕式Django Runserver。如果您可以解决您现在面临的问题,请不要忘记注意此网站。让我们现在开始!
本文目录清单:
1.如何解决Django的CSRF?2。Django HTML网页具有{%csrf_token%} {{uf.as_p}}模板,如何替换3。当我使用Django的超级用户登录时,出现CSRF错误。我该如何解决?CSRF_Token理解5.如何解决“ CSRF代币任务或不正确”的解决方案。6.如何解决跨域问题Django Post的403解决方案的解决方案。据说已经从Django1.x添加了CSRF保护。
CSRF(跨站点请求伪造的跨站点请求伪造,也称为“一次点击攻击”或骑行,通常被缩写为CSRF或XSRF,这是对网站的恶意使用。尽管听起来像是跨站点脚本(XSS),但它与XSS大不相同,并且攻击方法几乎留在左侧。XSS使用网站中的信任用户,而CSRF使用受信任用户的请求使用Comouflage的信任网站。与之相比。XSS攻击,CSRF攻击通常经常攻击攻击。并不是很受欢迎(因此,预防的资源非常稀缺),也难以防止它,因此被认为比XSS更危险。
错误:禁止(403)
CSRF序言失败了。请求中止
失败的原因:CSRF代币任务或不正确。
通常,当有Geenuine Cross Site请求伪造或Django的CSRF机制之前,这可能会发生这种情况。对于帖子表格,您需要诱使:
您的浏览器正在访问cookie。
视图函数使用模板而不是上下文使用RequestContext。
在模板中,每个针对内部URL的帖子表单中都有一个{%CSRF_Token%}模板标签。
如果您不使用CSRFViewMiddleware,则必须在使用CSRF_Token Template标签的任何视图上使用CSRF_PROTECT,作为接受时间的一个。
您正在查看此页面的帮助部分,因为您在Django设置文件中debug = true。将其更改为false,只有初始错误消息才会潜水。
您可以使用CSRF_FAILURE_VIEW设置来汇总此页面。
在线查找解决方案,说提交参数中必须有CSRF_Token才能成功。但是Internet是1.3或1.4版本的解决方案,可以在1.5版中使用。
在1.5.1版中,可行解决方案有三种类型:
一:
关闭CSRF Protection函数。ADD@CSRF_EXEMPT修饰符至视图功能。
来自django.views.decorators.csrf导入csrf_exempt@csrf_exemptdef视图(请求):#your代码...当然不要那么安全。
二:在模板文件中,每个表单提交域都添加了{%csrf_token%}标签,并使用渲染函数返回视图,或强行使用requestContext代替contect.example.example:from Django.shortcuts import renderdef联系(请求replect RenderDef Contact(请求)):form = contactform()#here i使用django表返回渲染(请求,'contact.html',{'form':form})
或者:
content.html内容:
htmlheadstyle type =“ text/css” ul.errorlist {margin:0;填充:0;} .Errorlist li {background-color:red;白颜色;显示:块;;填充:4px 5px;}/style titlesend/headbody h1contact us/h1 form action =“ method =”}/div class =“ field” {{form.email.errrs}}} babel for =“ id_email”:/label {form.email}}/div div class =“ field” field'field'field.message.error}}} labelfor =“ id_message”消息: /label {{form.message} /div Input type =“ submit” value =“ submit” / /form /form /form /hody /html
三:
方法2显然只能在Django模板中受到限制。如果我们使用JavaScript或Ajax怎么办?如何添加CSRF_Token怎么办?
我们可以使用JavaScript在cookie中提取CSRF_Token。
;i ++){var cookies = jquery.trim(cookies [i]);if(cookie.substring(0,name.length + 1)==(name +'=')){cookievalue =解码(cookinenenenenenenenenenenenenenenenenentname.length + 1)));break;}}}返回cookievalue;}
否则这很容易理解:
函数getCookie(name){var ancookie = document.cookie.split(“;”);for(var i = 0; iacookie.length; i ++){var ancrumbie [i] .split(“ =”);if(name == acrumb [0])返回(acrumb [1]);} return null;}
在ajax:$ .post(url,{“ csrfmiddletoken”:getCookie('csrftoken')},function(data){alert(data);});
但有一个问题。当有新用户访问此页面时,cookie中没有CSRFTOKEN。仅通过执行第二种方法可以在cookie中生成CSRFTOKEN值。解决此问题的方法然后进行更新。
它可以完全满足简单电台的需求。
呢Doctype HTML
html
身体
输入type =“ text” id =“ a” v =“ 0” + input type =“ text” id =“ b” value =“ 0” input type =“ button” onclick =“ onclick = rest()value =” =“ inputType=“ text” id =“ c”值=“ 0”
脚本类型=“ text/javascript”
功能结果()
{{{
a = document.getElementById('a')。价值;
a = parsefloat(a);
b = document.getElementById('b')。价值;
b = parsefloat(b);
c = document.getElementById('c');
c.value =(a+b)+“”;
}
/脚本
/身体
/html
您需要在表单后面添加csrf_token。
表单方法=“ post” {%csrf_token%}
xxx
/形式
或修改DJANGO源代码:django/mideware/csrf.py proces_view
在“#如果用户没有CSRF cookie”上添加以下代码:
如果request.path.startswith('/admin'):
返回接受()
如果Django版本为1.2.5,则修改了修改:
如果request.path.startswith('/admin'):
返回self._accept(请求)
这意味着请求URL是/admin,即使表格背后没有CSRF_Token,您也可以访问它。
CSRF_Token在Django中编写表单时的作用:
Django下的CSRF预防机制
CSRF预防机制
CSRF的防御可以从服务器和客户端启动。从服务到服务,防御效果更好。现在,一般的CSRF防御也可以在服务器上执行。
令牌防御的总体想法是:
步骤1:后端随机生成一个令牌,并将此令牌保存在会话状态。同时,后端将把这个令牌放在首页上。
步骤2:当前端需要启动请求(例如发布)时,将此令牌添加到请求数据或头部信息中,然后将其传递到后端;
步骤3:后端验证前端请求是否一致的令牌和会话是一致的;
1. Django下的CSRF预防机制
当Django首次响应客户端的请求时,将在服务器端随机生成一个令牌,并将其放置在cookie中。
这可以避免受到CSRF的攻击。
在Templete中,将{%CSRF_Token%}标记添加到每个帖子表单中。
在HTTP响应的曲奇中,Django将为您添加一个CSRFTKOKN字段,该值是自动令牌令牌
在所有帖子模板中,添加一个{%csrf_token%}标签,其功能是添加隐藏的输入标签以形式,如下所示
而且此csrf_token = cookie.csrftoken,有上下文['csrf_token'] = request.cookies ['csrtoken']当呈现模板['csrtoken']时
通过表单将帖子发送到服务器时,该表单包含隐藏在其上隐藏的输入项上的输入项。服务器收到它后,Django将在此请求中验证cookie中csrftkoken字段的值以及表单中的csrfmiddletken字段的值。如果是相同的,则表示这是法律请求,否则,此请求可能来自其他人的CSRF攻击,并退回403禁止。
当通过AJAX向服务器发送帖子请求时,需要添加X-CSRFTOKEN标头。值是cookie中csrftoken的值。收到服务湍流后,Django将验证该请求中的CSRFTOKEN字段,并且AJAX邮政消息标题X-CSRFTKEN标头是相同的。如果相同,则表明这是法律请求
具体实施方法
Django已完成供用户完成伪造的交叉点请求,并通过django.middle.csrf.csrf.csrfviewmiddleware.for Django,反cross -cross -site请求伪造功能分为全球和本地。
全球的:
中间件django.middleware.csrf.csrfviewmiddleware
当地的:
@csrf_protect,即使在设置中没有全局中间件,也强行设置了当前功能的fake -cross -stoite请求。
@csrf_exempt,即使设置中有全局中间件,取消当前功能抗-cross -Cross -site请求伪造功能。
注意:来自django.views.decocotors.csrf导入csrf_exempt,csrf_protect
1.原则
将csrftoken添加到客户端页面,验证服务器,并由服务器验证的工作由'django.middleware.csrfviewmiddleware..csrfviewmiddleware..ine完成,这有两种捍卫Django中CSRF攻击的方法:
1.以形式添加csrftoken
2.将X-CSRFTKEN请求头添加到请求请求。
注意:Django默认情况下对所有帖子请求进行了CSRFTKOOK验证。如果验证失败,则403错误等待。
django套装在cookie中
VUE发送职位403:CSRF失败:CSRF代币任务或不正确的解决方案:
解决CSRF令牌缺失或不正确的解决方案。“
现象:
禁止(403)
CSRF验证失败。要求中止。
帮助
出于失败的原因:
CSRF令牌缺失或不正确。
通常,当有Geenuine Cross Site请求伪造或Django的CSRF机制之前,这可能会发生这种情况。对于帖子表格,您需要诱使:
您的浏览器正在访问cookie。
视图函数使用模板而不是上下文使用RequestContext。
在模板中,每个针对内部URL的帖子表单中都有一个{%CSRF_Token%}模板标签。
如果您不使用CSRFViewMiddleware,则必须在使用CSRF_Token Template标签的任何视图上使用CSRF_PROTECT,作为接受时间的一个。
您正在查看此页面的帮助部分,因为您在Django设置文件中debug = true。将其更改为false,只有初始错误消息才会潜水。
您可以使用CSRF_FAILURE_VIEW设置来汇总此页面。
解决方案步骤:
1个设置
mideware_classes =(
'django.middleware.common.commonmiddleware',
'django.contrib.sessions.middleware.sessionmiddleware',
'django.middleware.csrf.csrfviewmiddleware',#确认存在
'django.contrib.auth.middle.authenticationmiddleware',,
'django.contrib.messages.middle.messagemiddleware',,
#未注释的下一行,用于简单的点击夹克规定:
#'django.middleware.clickjackingingingingingingingingingingingingingingingsmiddleware',
治愈
html中的2形式添加模板标签{%csrf_token%}
形式Action =“。”。方法=“ post” {%csrf_token%}
3 django项目views.py
来自django.shortcuts导入render_to_response
来自django.template导入requestContext
def some_view(请求):
#...
返回render_to_response('my_template.html',
my_data_dictionary,
context_instance = requestContext(请求))
如果您有任何疑问,请戳戳跨站点请求伪造
P.S如果您想阻止CSRF
方法1:评论django project设置。
#'django.middleware.csrf.csrfviewmiddleware'
方法2:Django Project views.py添加屏蔽装饰
来自django.views.decocotors.csrf导入csrf_exempt
@csrf_exempt
def some_view(请求):
#...
1.安装django-cors头
PIP安装django-cors头
1
2.配置设置.py文件
instasted_apps = [[[
Em
“ corsheaders”,
Em
这是给予的
mideware_classes =(
Em
'corsheaders.middleware.corsmiddleware',
'django.middleware.common.commonmiddleware',#NOTE订单
Em
治愈
#
cors_allow_credentials = true
cors_origin_allow_all = true
cors_origin_whitelist =(
'*'
治愈
cors_allow_methods =(
'删除',
'得到',
'选项',
'修补',
'邮政',
'放',
'看法',
治愈
cors_allow_headers =(
'xmlhttprequest',
'x_filename',
“接受”,
'授权',
'内容类型',
'dnt',
'起源',
'用户代理',
'x-csrftoken',
'x征求书',
“ pragma”,
治愈
好!问题解决了!
让我们谈谈Django如何禁用CSRF的引入。感谢您花时间阅读本网站的内容。有关关闭Django Runserver和Django如何禁用CSRF的更多信息。不要忘记在此网站上找到它。