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

Django生成的令牌如何传递到前台?

时间:2023-03-05 17:30:34 网络应用技术

  简介:今天,首席CTO注释要与您分享如何传递Django生成的令牌的相关内容。如果您可以解决您现在面临的问题,请不要忘记注意此网站。让我们现在开始!

  大家好,我从互联网上发现了很多关于令牌的文章。他们都提到要生成令牌,然后每次前端请求时,都使用此令牌。如何将生成的令牌使用到前端?

  前端可以使用jQuery来获得它,还是您需要其他前端框架?在这方面有一个完整的例子吗?

  做背部 - 端,我不明白前端 - 请原谅我

  谢谢你!十字路口

  解决方案1:

  通常,后端有一个结构可以采用令牌,然后根据协议要求,根据协议要求

  令牌

  放在标题

  放置URI参数

  放在身体

  后端

  解决方案2:

  因为HTTP协议是无状态令牌是您在后台发送的唯一徽标。访问背景时,您可以带上这个令牌背景。

  会议的角色

  解决方案3:

  前台生成的令牌可能存在安全问题

  解决方案4:

  您应该知道背景中的令牌。

  用户登录后,它会生成一个session_id,即可以在redis中存在的令牌。然后保存前端或客户端,保存cookie或ls,然后将所有请求用作基本参数(也通过cookie),然后在获得服务器后,验证您是否是您。

  解决方案5:

  使用许多字段,以形式为例:

  背景生成令牌。

  前端打印表格,令牌变成隐藏的项目。输入类型=“ hide” value =“ {token}}}”

  客户提交表格。

  背景验证令牌合法性。

  验证成功并处理表单。验证失败并返回错误处理页面。

  解决方案6:

  令牌通常在后端生成。登录后,返回前端,然后将请求带到令牌以验证身份。

  解决方案7:

  问题在于,前端生成的令牌对背景很有用

  解决方案8:

  通常,令牌是由服务器端生成的,并做CSRF。我添加了我在前端看到的栗子。尽管我没有任何鸡蛋,但我发现我被废除了。

  例如,您有一种验证代码形式。传递验证代码时,您会添加一个新的隐藏域,以通过本地JS加密传递验证代码,并将其作为参数传递。

  但这没有用,因为提交时,请使用相同的JS模拟。

  解决方案9:

  在大多数情况下,代币作为令牌是在服务器端生成的。有许多方法要生成。从简单的点或ID或两个混合hash computingyou can中,生成的目的是在与前端通信时将其用作令牌。当识别请求资源许可证时,服务器将在一段时间内有效,并且可以在一段时间内有效,并且可能是其他情况和其他限制,例如同一IP,因此为了防止某些资源被非法访问

  有时,前端(包括本地客户或应用程序)生成令牌是同意了良好的加密机制。服务器可以信任客户端的输入。

  在休息框架中,请求需要在头部添加授权令牌,以证明它是合法用户

  至于如何生成该令牌,引入了以下三种方法:

  选择用户时,它将自动生成令牌

  输入工厂目录

  在工厂目录中,打开db.sqlite3

  添加一个

  如何将令牌添加到请求头中?

  解决此问题的方法是“预加载”。本质上,您要预先警告django orm,您必须一遍又一遍地告诉它相同的无聊指示。

  对您的问题的描述确实令人困惑。感觉就像您对这一方面的了解不多,所以像您这样的问题很少,因为回答后,您会有更多的问题,甚至不断提出问题。

  在学习过程中,您必须学习自己搜索解决方案...

  django。如果您已经阅读了官方文档,查询数据并将列表传递给前台。没有问题,非常简单的代码行。如果您不能,请检查Django文档的相应版本。

  jQuery ajax请求。在下面的示例代码上查看

  //这是使用POST方法的Ajax异步请求

  $ .ajax({type:“ post”,

  URL:“/message/”,

  数据: {

  Telnum:$(“ #telnum”)。val(),

  Ordernum:$(“ #ordernum”)。val(),

  Mesgchaannel:$(“ #mesgchaannel”)。val(),

  mesglevel:$(“ #mesglevel”)。val(),

  开始时间:$(“#datePicker1”)。val(),

  末日:$(“#datepicker2”)。val()

  },,

  成功:功能(响应){

  $('#result')。HTML(响应);

  }

  });

  //以下是在异步请求成功之后接收数据的HTML标签

  div

  div ID =“结果” class =“ alert”/div

  /div

  上次使用Django时,我遇到了这个问题。信息如下:

  Django请求CSRF_TOKEN验证邮政请求,后端将检测到前端发出的令牌。如果您有任何问题,则可能会有403 for犯错。

  当页面上请求页面时,该令牌放在后端。您可以在模板中使用{%csrf_token%}。例如,可以完成表单的帖子请求。随机令牌值是在后端响应页面中生成的。AJAX请求可以将此值放在HTTP标头中。需要对后端进行响应并将其返回到cookie中,以便前端可以获取此值,然后将其放入标题中,然后提出邮政请求。

  对于发布请求,如果您想在最前沿拥有一个令牌数据,则需要一些修改方法装饰方法

  来自django.views.decocotors.csrf导入csrf_protect

  或者

  来自django.views.decocotors.csrf导入需要_csrf_token

  或者

  来自django.views.decocotors.csrf导入

  这里使用的是,可以从cookie值获得前端

  使用时添加相应的视图或方法

  @ensure_csrf_cookie

  例如:

  来自django.views.decocotors.csrf导入需要_csrf_token

  从django.shortcuts导入渲染

  @requires_csrf_token

  def my_view(请求):

  C = {}

  C.Update(CSRF(请求))

  返回httpresponse(“ value”,c)

  并且可以使用帖子,可以使用令牌

  @csrf_exempt

  对于Ajax,前端需要获得令牌

  Javascipt

  函数getCookie(name){

  var cookies = null;

  if(document.cookie document.cookie!=''){{{

  var cookie = document.cookie.split(';');

  for(var i = 0; i cookies.length; i ++){

  var cookies = cookie [i] .trim();

  //此cookie字符串以我们想要的名称开头吗?

  if(cookie.substring(0,name.length + 1)==(name +'=')){

  cookievalue = decodeuricomponent(cookie.substring(name.length + 1));

  休息;

  }

  }

  }

  返回厨师;

  }

  函数loadData()

  {{{

  var csrftoken = getCookie('csrftoken');

  var xmlhttp;

  if(window.xmlhttprequest)

  {// IE7+,Firefox,Chrome,Opera,Safari的代码

  xmlhttp = new XmlHttpRequest();

  }

  别的

  {// IE6的代码,IE5

  xmlhttp = new ActiveXobject(“ Microsoft.xmlhttp”);

  }

  xmlhttp.onreadystatechange = function()

  {{{

  if(xmlhttp.readystate == 4 xmlhttp.status == 200)

  {{{

  str = xmlhttp.ResponseText;

  警报(str);

  }

  }

  xmlhttp.open(“ post”,“ ajax/”,true);

  xmlhttp.setRequestheader('x-csrftoken',csrftoken)

  xmlhttp.send();

  }

  您必须首先打开(),然后setRequestheader(),然后send()

  官方文件的jQuery

  功能CSRFSAFEMETHOD(方法){

  //这些HTTP方法不需要CSRF保护

  返回(/^(stot | head特别

  }

  功能sameorigin(url){

  //测试给定的URL是相同的原始URL

  // URL可以是相对或方案重新启动或绝对的

  var host = document.location.host;//主机 +端口

  var协议= document.location.protocol;

  var sr_origin ='//' +主机;

  VAR ORIGN =协议 + SR_ORIGIN;

  //允许绝对或方案相对URL表示来源

  return(url ==原始|| url.slice(0,Origin.Length + 1)== Origin +'/')||

  (url == sr_origin || url.slice(0,sr_origin.length + 1)== sr_origin +'/')||

  //或任何不是方案相对或绝对的其他URL,即相对。

  呢(/^(// | http:| https:)。*/。test(url));

  }

  $ ..ajaxsetup({{{{

  beforesend:function(xhr,设置){

  如果(!csrfsafemethod(settings.type)sameorigin(settings .url)){{

  //将令牌发送到Say-Origin,仅关联URL。

  //仅在该方法保证CSRF保护时才发送令牌

  //使用较早获取的csrftkoken值

  Xhr.setRequestheader(“ X-Csrftoken”,csrftoken);

  }

  }

  });

  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代币任务或不正确的解决方案:

  结论:以上是如何传递有关Django的首席CTO注释产生的令牌的全部内容。我希望这对每个人都会有所帮助。如果您想了解有关此信息的更多信息,请记住要收集对该网站的关注。