当前位置: 首页 > 网络应用技术

如何禁用CSRF(CLOSS DJANGO RUNSERVER)

时间:2023-03-06 16:30:59 网络应用技术

  今天,我将与您分享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的更多信息。不要忘记在此网站上找到它。