详解Django中CSRF和CORS的区别

来自:网络
时间:2022-12-28
阅读:
目录

一、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的区别

返回顶部
顶部