gpt4 book ai didi

Django跨域请求CSRF的方法示例

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 24 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Django跨域请求CSRF的方法示例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

web跨域请求 。

1.为什么要有跨域限制 。

举个例子:

1.用户登录了自己的银行页面 http://mybank.com,http://mybank.com向用户的cookie中添加用户标识。 2.用户浏览了恶意页面 http://evil.com。执行了页面中的恶意AJAX请求代码。 3.http://evil.com向http://mybank.com发起AJAX HTTP请求,请求会默认把http://mybank.com对应cookie也同时发送过去。 4.银行页面从发送的cookie中提取用户标识,验证用户无误,response中返回请求数据。此时数据就泄露了。 5.而且由于Ajax在后台执行,用户无法感知这一过程.

以上就是所谓是CSRF(Cross-site request forgery)攻击,跨站请求伪造。接下来说一下 Django中处理csrf的方式 。

正常情况下直接发起一个psot请求,会报错。错误的意思是csrf校验失败,request请求被丢弃掉.

那么在django中的post失败有两种解决办法:

解决办法一:将csrf中间层注释掉 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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' ,
 
]

此时将不会进行csrf的校验,但如前面所述,这是一种不安全的行为。而且djano也不推荐使用 。

解决办法二:

在前面的提示中有这样一句话:

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

也就是说在网页中加入csrf_token的标签就可以通过csrf校验 。

Django 提供的 CSRF 防护机制:

1、django 第一次响应来自某个客户端的请求时,会在服务器端随机生成一个 token,把这个 token 放在 cookie 里。然后每次 POST 请求都会带上这个 token,这样就能避免被 CSRF 攻击.

2、在返回的 HTTP 响应的 cookie 里,django 会为你添加一个 csrftoken 字段,其值为一个自动生成的 token,在所有的 POST 表单时,必须包含一个 csrfmiddlewaretoken 字段 (只需要在模板里加一个 tag, django 就会自动帮你生成,见下面) 。

3、在处理 POST 请求之前,django 会验证这个请求的 cookie 里的 csrftoken 字段的值和提交的表单里的 csrfmiddlewaretoken 字段的值是否一样。如果一样,则表明这是一个合法的请求,否则,这个请求可能是来自于别人的 csrf 攻击,返回 403 Forbidden. 。

4、在所有 ajax POST 请求里,添加一个 X-CSRFTOKEN header,其值为 cookie 里的 csrftoken 的值 。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.

原文链接:https://blog.csdn.net/u013967628/article/details/83479652 。

最后此篇关于Django跨域请求CSRF的方法示例的文章就讲到这里了,如果你想了解更多关于Django跨域请求CSRF的方法示例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com