广告
返回顶部
首页 > 资讯 > 后端开发 > Python >详解Django中CSRF和CORS的区别
  • 516
分享到

详解Django中CSRF和CORS的区别

2024-04-02 19:04:59 516人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录一、CSRF:保护机制二、CORS:跨域访问一、CSRF:保护机制 Django预防CSRF攻击的方法是在用户提交的表单中加入一个csrftoken的隐含值,这个值和服务器中保存

一、CSRF:保护机制

Django预防CSRF攻击的方法是在用户提交的表单中加入一个csrftoken的隐含值,这个值和服务器中保存的csrftoken的值相同,这样做的原理如下:

1、在用户访问django的可信站点时,django反馈给用户的表单中有一个隐含字段csrftoken,这个值是在服务器端随机生成的,每一次提交表单都会生成不同的值

2、当用户提交django的表单时,服务器校验这个表单的csrftoken是否和自己保存的一致,来判断用户的合法性

3、当用户被csrf攻击从其他站点发送精心编制的攻击请求时,由于其他站点不可能知道隐藏的csrftoken字段的信息这样在服务器端就会校验失败,攻击被成功防御

二、CORS:跨域访问

举例:前端后端分别是两个不同的端⼝

前端:127.0.0.1:8081
后端:192.168.17.129:8880

现在,前端与后端分别是不同的端⼝,这就涉及到跨域访问数据的问题,因为浏览器的同源策略,默认是不⽀持两个不同域名间相互访问数据,⽽我们需要在两个域名间相互传递数据,这时我们就要为后端添加跨域访问的⽀持。

Django后端设置:

1、使用djanGo-cors-headers扩展 a、安装

pip install django-cors-headers

b、添加子应用

INSTALLED_APPS = [ 
	... 
	'corsheaders', 
	...
]

c、中间件配置

MIDDLEWARE = [ 
	'corsheaders.middleware.CorsMiddleware',
	 ...
 ]

d、添加白名单

# 设置CORS⽩名单
CORS_ORIGIN_WHITELIST = ( 
	'Http://127.0.0.1:8081',
	'http://127.0.0.1:8080', 
	'http://localhost:8080', 
	'http://www.nagle.cn:8080', 
	'http://api.nagle.cn:8083',
)

CORS_ALLOW_CREDENTIALS = True # 允许携带cookie

凡是出现在⽩名单中的域名,都可以访问后端接⼝CORS_ALLOW_CREDENTIALS 指明在跨域访问中,后端是否⽀持对cookie的操作。

2、跨域实现流程 a、浏览器会第一次先发送OPTioNS请求询问后端是否允许跨域,后端查询白名单中是否有这个域名 b、如果域名在白名单列表中则响应结果中告知浏览器允许跨域 c、浏览器第二次发送POST请求,携带用户登录数据到后端,完成登录验证操作

在这里插入图片描述

在这里插入图片描述

到此这篇关于详解Django中CSRF和CORS的区别的文章就介绍到这了,更多相关Django CSRF和CORS内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 详解Django中CSRF和CORS的区别

本文链接: https://www.lsjlt.com/news/119754.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 详解Django中CSRF和CORS的区别
    目录一、CSRF:保护机制二、CORS:跨域访问一、CSRF:保护机制 Django预防CSRF攻击的方法是在用户提交的表单中加入一个csrftoken的隐含值,这个值和服务器中保存...
    99+
    2022-11-11
  • Django MTV和MVC的区别详解
    在上一节《Django是什么》中,我们对 Django 的诞生以及 Web 框架的概念有了基本的了解,本节我们介绍 Django 的设计模式,也就是 MTV。 在 Web 开发领域还...
    99+
    2022-11-11
  • Django中select_related和prefetch_related的用法与区别详解
    目录0. 本文借助django-debug-toolbar来展现效果1. 介绍2. 使用2.1 原生的查询2.1.1 代码2.1.2 图示2.1.3 查询解释 2...
    99+
    2022-11-11
  • Django中get()和filter()返回值区别详解
    先上官方文档! filter(**kwargs) 返回包含与给定查找参数匹配的对象的新查询集。 简单来说,返回一个又对象组成的查询集合 get(**kwargs) 返回与给定查找...
    99+
    2022-11-12
  • mybatis中#{}和${}的区别详解
    目录一、MyBatis中${}和#{}的区别1.1 ${}和#{}演示1.2 SQL注入问题1.3 ${}和#{}的区别1.4 #{}底层是如何防止SQL注入的?1.4.1 网上的答...
    99+
    2022-11-13
  • Servlet中/和/*的区别详解
    目录本文提纲版本约定✍正文点拨“市面上”的错误答案1、/用于Servlet,demo:这个urlPatterns是合法的。只不过它属于精确匹配,也就是说别看它中间有*,仍...
    99+
    2022-11-12
  • mysql中#{}和${}的区别详解
    #{}会将传入的数据当成一个字符串,会对自动传入的数据加一个双引号 order by #{userId}   这里假如userId = 111,那么解析成sql时...
    99+
    2022-11-13
  • 详解JS中? ?和?. 和||的区别
    目录1、 与 || 的区别2、 和 . 的区别1、 与 || 的区别 1)相同点: 和 || 的用法相同,都是前后是值,中间用符号连接,根据前面的值来判断最终是返回前面的值还是后面...
    99+
    2022-11-13
  • Java中equals和==的区别详解
    目录1.java中的数据类型,可分为两类: 2.再稍微改动一下程序,会有更奇怪的发现: 3. 字符串缓冲池 4.再次更改程序: 总结1.java中的数据类型,可分为两类: 1.基本...
    99+
    2022-11-12
  • JavaScript/TypeScript中==和===的区别详解
    在JS/TS项目里,除了能看到==操作符来判断两个变量是否相等外,我们还会看到===操作符,这两者有什么区别吗? 先上结论, 对于String, number这些基础类型,==操作符...
    99+
    2022-11-13
  • 详解Java中==和equals()的区别
    目录1. ==1.1 基本数据类型1.2 引用数据类型1.3 小结2. equals3. 总结1. == == 是运算符,用来判断两个值是否相等,==可以使用在基本数据类型变量和引用...
    99+
    2022-11-12
  • Java中Exception和Error的区别详解
    世界上存在永远不会出错的程序吗?也许这只会出现在程序员的梦中。随着编程语言和软件的诞生,异常情况就如影随形地纠缠着我们,只有正确的处理好意外情况,才能保证程序的可靠性。 java语...
    99+
    2022-11-12
  • java中StringStringBuffer和StringBuilder的区别详解
    目录从声明定义上来谈从结构上来谈从线程安全来谈总结从声明定义上来谈 只有String 可以 直接声明创建 而 StringBuffer 与 StringBuilder 必须去new...
    99+
    2022-11-13
  • Android中asset和raw的区别详解
    *res/raw和assets的相同点: 1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。 *res/raw和assets的不同点: 1.res...
    99+
    2022-06-06
    asset Android
  • python中response.text 和response.content的区别详解
    1.response.text - 类型:str - 解码类型: 根据HTTP 头部对响应的编码作出有根据的推测,推测的文本编码 - 如何修改编码方式:response.encoding=”gbk” 2. respo...
    99+
    2022-06-02
    python response.text response.content
  • 详解Node.js中exports和module.exports的区别
    今天看了下node.js的require方法的源码,终于搞清楚exports和module.exports的区别了。 我们知道,node.js的模块暴露有两种方法。 1. 方式一:用exports /...
    99+
    2022-06-04
    详解 区别 Node
  • 详解nodejs中exports和module.exports的区别
    require 用来加载代码,而 exports 和 module.exports 则用来导出代码。但很多新手可能会迷惑于 exports 和 module.exports 的区别,为了更好的理解 expo...
    99+
    2022-06-04
    详解 区别 exports
  • node.js中grunt和gulp的区别详解
    node.js中grunt和gulp的区别详解 自nodeJS登上前端舞台,自动化构建变得越来越流行。目前最流行的当属grunt和gulp,这两个光看名字挺像,功能也差不多,不过gulp能在grunt这位大...
    99+
    2022-06-04
    详解 区别 js
  • Android中src和background的区别详解
    ImageView中XML属性src和background的区别: background会根据ImageView组件给定的长宽进行拉伸,而src就存放的是原图的大小,不会进行拉...
    99+
    2022-06-06
    src background Android
  • 详解C++中typedef 和 #define 的区别
    1、执行上不同 关键字 typedef 在编译阶段有效,由于是在编译阶段,因此 typedef 有类型检查的功能。 #define 则是宏定义,发生在预处理阶段,也就是编译之前,它只...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作