一、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内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!