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')

最新文章

  1. 后台运行进程(background job)
  2. 类-string/Manth/Random/DateTime-及练习
  3. XE3随笔9:使用不同的数据类型标记数组
  4. 详解模块定义(.def)文件
  5. Sprint第二个冲刺(第二天)
  6. verilog 学习笔记
  7. Makefile 知识点
  8. APP-PAY-06153 When Trying To Open Organization Definition Form (文档 ID 1323165.1)
  9. 想学ps的,这全是精华,拿走不谢!!!
  10. Python:构建缓冲带提取区域平均坡度
  11. Hibernate 事件监听
  12. C#两个实体之间相同属性的映射
  13. 第20月第18天 小码哥swift
  14. 纯CSS打造萌萌哒大白
  15. 改变input中的placeholder样式
  16. Python中让MySQL查询结果返回字典类型的方法
  17. php 输出缓冲 Output Control
  18. 洛谷 P2421 A-B数对(增强版)
  19. 不通过注册表使用ActiveX对象
  20. ASP.NET MVC5 视图相关学习

热门文章

  1. Union All ,Merge,Merge join 区别
  2. ECharts使用问题
  3. python类的特殊成员和方法
  4. 【Linux学习】Linux文件系统5—查看文件内容命令
  5. 接口开发之PHP创建XML文件
  6. POJ - 3414 Pots BFS(著名倒水问题升级版)
  7. 部署spark 1.3.1 standalong模式
  8. pytest入门学习(1)
  9. Apache与Tomcat的区别和联系
  10. ADO学途 five day 连接数据库