django框架CSRF防护原理与用法分析


Posted in Python onJuly 22, 2019

本文实例讲述了django框架CSRF防护。分享给大家供大家参考,具体如下:

CSRF防护

一、什么是CSRF?

CSRF: Cross-site request forgery,跨站请求伪造

用户登录了正常的网站A, 然后再访问某恶意网站,该恶意网站上有一个指向网站A的链接,那么当用户点击该链接时,则恶意网站能成功向网站A发起一次请求,实际这个请求并不是用户想发的,而是伪造的,而网站A并不知道。

攻击者利用了你的身份,以你的名义发送恶意请求,比如:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账等。

如果想防止CSRF,首先是重要的信息传递都采用POST方式而不是GET方式,接下来就说POST请求的攻击方式以及在Django中的避免

二、CSRF攻击演示

步骤1:登录成功后进入发帖界面,进行发帖(使用post请求发帖,测试时先关闭csrf中间件)

步骤2:限制登录成功后才能发帖

  • 可通过session保存登录成功的用户名
  • 判断session中是否有保存用户名,有才允许发帖

步骤3:CSRF攻击演示

django框架CSRF防护原理与用法分析

三、CSRF防护

重要信息如金额、积分等的获取,采用POST请求

开启CSRF中间件(默认就是开启的)

# 项目下的setting.py
MIDDLEWARE_CLASSES = (
  ...
  # 开启csrf中间件(默认是开启的)
  'django.middleware.csrf.CsrfViewMiddleware',
  ...
)

表单post提交数据时加上 {% csrf_token %} 标签

四、防御原理【了解】

  1. 服务器在渲染模板文件时,会在html页面中生成一个名字叫做 csrfmiddlewaretoken 的隐藏域。
  2. 服务器会让浏览器保存一个名字为 csrftoken 的cookie信息
  3. post提交数据时,两个值都会发给服务器,服务器进行比对,如果一样,则csrf验证通过,否则提示403 Forbidden

希望本文所述对大家基于Django框架的Python程序设计有所帮助。

Python 相关文章推荐
Python 中的with关键字使用详解
Sep 11 Python
python3实现跳一跳点击跳跃
Jan 08 Python
python腾讯语音合成实现过程解析
Aug 01 Python
python使用协程实现并发操作的方法详解
Dec 27 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
Jun 30 Python
使用python编写一个语音朗读闹钟功能的示例代码
Jul 14 Python
Python colormap库的安装和使用详情
Oct 06 Python
Python + opencv对拍照得到的图片进行背景去除的实现方法
Nov 18 Python
python实现录制全屏和选择区域录屏功能
Feb 05 Python
sklearn中的交叉验证的实现(Cross-Validation)
Feb 22 Python
Python数据可视化之基于pyecharts实现的地理图表的绘制
Jun 10 Python
pandas中pd.groupby()的用法详解
Jun 16 Python
全面了解django的缓存机制及使用方法
Jul 22 #Python
python logging模块书写日志以及日志分割详解
Jul 22 #Python
使用 Python 快速实现 HTTP 和 FTP 服务器的方法
Jul 22 #Python
Django框架静态文件使用/中间件/禁用ip功能实例详解
Jul 22 #Python
python多进程下实现日志记录按时间分割
Jul 22 #Python
Django框架自定义模型管理器与元选项用法分析
Jul 22 #Python
python实现日志按天分割
Jul 22 #Python
You might like
配置最新的PHP加MYSQL服务器
2006/10/09 PHP
PHP文件读写操作相关函数总结
2014/11/18 PHP
PHP hex2bin()函数用法讲解
2019/02/25 PHP
JS input 数字验证代码
2009/07/30 Javascript
jquery插件制作 手风琴Panel效果实现
2012/08/17 Javascript
jquery插件开发注意事项小结
2013/06/04 Javascript
JavaSciprt中处理字符串之sup()方法的使用教程
2015/06/08 Javascript
jQuery增加自定义函数的方法
2015/07/18 Javascript
JavaScript中有关一个数组中最大值和最小值及它们的下表的输出的解决办法
2016/07/01 Javascript
jQuery简单入门示例之用户校验demo示例
2016/07/09 Javascript
深入了解JavaScript的逻辑运算符(与、或)
2016/12/20 Javascript
微信小程序页面传值实例分析
2017/04/19 Javascript
vue-cli3.0 特性解读
2018/04/22 Javascript
layui中使用jquery控制radio选中事件的示例代码
2018/08/15 jQuery
基于Nodejs的Tcp封包和解包的理解
2018/09/19 NodeJs
vue封装可复用组件confirm,并绑定在vue原型上的示例
2019/10/31 Javascript
js实现一款简单踩白块小游戏(曾经很火)
2019/12/02 Javascript
jquery实现轮播图特效
2020/04/12 jQuery
Antd中单个DatePicker限定时间输入范围操作
2020/10/29 Javascript
原生js拖拽功能制作滑动条实例代码
2021/02/05 Javascript
SQLite3中文编码 Python的实现
2017/01/11 Python
Python字典及字典基本操作方法详解
2018/01/30 Python
python TCP Socket的粘包和分包的处理详解
2018/02/09 Python
python中upper是做什么用的
2020/07/20 Python
python math模块的基本使用教程
2021/01/16 Python
欧舒丹美国官网:L’Occitane美国
2018/02/23 全球购物
Linux内核的同步机制是什么?主要有哪几种内核锁
2016/07/11 面试题
十岁生日家长答谢词
2014/01/17 职场文书
毕业生自荐书
2014/02/02 职场文书
会计电算化专业自荐信
2014/03/15 职场文书
学习礼仪心得体会
2014/09/01 职场文书
2014年监理工作总结范文
2014/11/17 职场文书
2015年计划生育责任书
2015/05/08 职场文书
使用 Apache Superset 可视化 ClickHouse 数据的两种方法
2021/07/07 Servers
Python MNIST手写体识别详解与试练
2021/11/07 Python
Javascript 解构赋值详情
2021/11/17 Javascript