Django之CSRF问题
2024-08-30 09:29:30
1、csrf全称:cross site request forgery(跨站请求伪造),举例来讲,一个安全的网站A,一个恶意网站B,当你在A网站进行了登录后,这时候浏览器会保存你的cookie和session相关信息,然后,当你访问B网站时,你点击了一个指向A网站的链接,这个链接就会带着你的cookie和session向A发送请求,就可能造成无法想象的后果了。
2、防止这一攻击的方式一般有两种:一种是Challenge-Response的方式,例如通过Captcha和重新输入密码等方式来验证请求是否伪造,但这会影响用户体验,类似银行付款会采用这样的方式。另一种是通过随机Token的方式,多数Web系统都会采用这种方式。django采用的就是这种方式。
3、django会在用户提交的表单里添加一个csrftoken隐含值,使用这一方式的具体原理如下:
1)在用户访问django的可信站点时,django反馈给用户的表单中有一个隐含字段csrftoken,其值是在服务器端随机生成的,每一次提交表单后又会生成不同的值;
2)当用户提交django的表单时,服务器校验这个表单的csrftoken是否和自己保存的一致,来判断用户的合法性;
3)当用户被csrf攻击从其他站点发送精心编制的攻击请求时,由于其站点不可能知道隐藏的csrftoken字段的信息这样在服务器端就会校验失败,攻击被成功防御;
4、csrf装饰器的使用
from django.views.decorators.csrf import csrf_exempt,csrf_protect
# @csrf_protect #需要走csrf验证
# @csrf_exempt #不需要走csrf验证 # 给CBV加装饰器
from django.views import View
from django.utils.decorators import method_decorator # 方式一:使用method_decorator
class StudentsView(View): @method_decorator(csrf_exempt)
def dispatch(self, request, *args, **kwargs):
return super(StudentsView, self).dispatch(request, *args, **kwargs) def get(self, request, *args, **kwargs):
print('get方法')
return HttpResponse('GET') def post(self, request, *args, **kwargs):
return HttpResponse('POST') #方式二:给类加装饰器,name标明要装饰的函数
@method_decorator(csrf_exempt,name='dispatch')
class ClassView(View): def dispatch(self, request, *args, **kwargs):
return super(ClassView, self).dispatch(request, *args, **kwargs) def get(self, request, *args, **kwargs):
print('get方法')
return HttpResponse('GET') def post(self, request, *args, **kwargs):
return HttpResponse('POST')
最新文章
- 后台运行进程(background job)
- 类-string/Manth/Random/DateTime-及练习
- XE3随笔9:使用不同的数据类型标记数组
- 详解模块定义(.def)文件
- Sprint第二个冲刺(第二天)
- verilog 学习笔记
- Makefile 知识点
- APP-PAY-06153 When Trying To Open Organization Definition Form (文档 ID 1323165.1)
- 想学ps的,这全是精华,拿走不谢!!!
- Python:构建缓冲带提取区域平均坡度
- Hibernate 事件监听
- C#两个实体之间相同属性的映射
- 第20月第18天 小码哥swift
- 纯CSS打造萌萌哒大白
- 改变input中的placeholder样式
- Python中让MySQL查询结果返回字典类型的方法
- php 输出缓冲 Output Control
- 洛谷 P2421 A-B数对(增强版)
- 不通过注册表使用ActiveX对象
- ASP.NET MVC5 视图相关学习