详解Django中CSRF和CORS的区别
一、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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Python自定义函数实现求两个数最大公约数、最小公倍数示例
这篇文章主要介绍了Python自定义函数实现求两个数最大公约数、最小公倍数,结合实例形式分析了Python求解两个数最大公约数与最小公倍数相关原理与算法实现技巧,需要的朋友可以参考下2018-05-05
利用Python3分析sitemap.xml并抓取导出全站链接详解
因为最近更换了网址,所以需要在百度站长平台提交网址,不管是主动推送还是手动提交,前提都是要整理网站的链接,手动添加太麻烦,于是就想写个脚本直接抓取全站链接并导出,本文详细介绍的是实现的方法及过程,需要的朋友们一起来看看吧。2017-07-07
python dict 字典 以及 赋值 引用的一些实例(详解)
下面小编就为大家带来一篇python dict 字典 以及 赋值 引用的一些实例(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-01-01
Windows 平台做 Python 开发的最佳组合(推荐)
在 Windows 上如何做 Python 开发呢?相信大神们都会有自己的解决方案,但本文希望介绍微软官方发布的 Terminal 和 Visual Studio Code,希望它们能构建更流畅的 Windows 开发体验,感兴趣的朋友跟随小编一起看看吧2020-07-07


最新评论