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 相关文章推荐
urllib2自定义opener详解
Feb 07 Python
Python的多态性实例分析
Jul 07 Python
Python遍历目录中的所有文件的方法
Jul 08 Python
Python抓取框架 Scrapy的架构
Aug 12 Python
详解Python解决抓取内容乱码问题(decode和encode解码)
Mar 29 Python
Python变量访问权限控制详解
Jun 29 Python
django做form表单的数据验证过程详解
Jul 26 Python
解决keras使用cov1D函数的输入问题
Jun 29 Python
python 中的命名空间,你真的了解吗?
Aug 19 Python
python学习之panda数据分析核心支持库
May 07 Python
Django migrate报错的解决方案
May 20 Python
只用40行Python代码就能写出pdf转word小工具
May 31 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中文本数据翻页(留言本翻页)
2006/10/09 PHP
PHP源码分析之变量的存储过程分解
2014/07/03 PHP
PHP中Http协议post请求参数
2015/11/02 PHP
CI框架实现cookie登陆的方法详解
2016/05/18 PHP
PHP基于接口技术实现简单的多态应用完整实例
2017/04/26 PHP
用nodejs访问ActiveX对象,以操作Access数据库为例。
2011/12/15 NodeJs
解决jquery的datepicker的本地化以及Today问题
2012/05/23 Javascript
用js代码和插件实现wordpress雪花飘落效果的四种方法
2014/12/15 Javascript
JavaScript中的this机制
2016/01/30 Javascript
jquery表格datatables实例解析 直接加载和延迟加载
2016/08/12 Javascript
js实现简单的选项卡效果
2017/02/23 Javascript
ES6下React组件的写法示例代码
2017/05/04 Javascript
JS实现为动态创建的元素添加事件操作示例
2018/03/17 Javascript
用element的upload组件实现多图片上传和压缩的示例代码
2019/02/12 Javascript
vue踩坑记录之数组定义和赋值问题
2019/03/20 Javascript
vue中的mescroll搜索运用及各种填坑处理
2019/10/30 Javascript
原生JavaScript实现的无缝滚动功能详解
2020/01/17 Javascript
JavaScript实现前端倒计时效果
2021/02/09 Javascript
[02:49]DOTA2完美大师赛首日观众采访
2017/11/23 DOTA
[13:55]Newbee vs Team Spirit
2018/06/07 DOTA
Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码
2018/09/14 Python
Python for循环与range函数的使用详解
2019/03/23 Python
Python和Sublime整合过程图示
2019/12/25 Python
PyCharm汉化安装及永久激活详细教程(靠谱)
2020/01/16 Python
python 截取XML中bndbox的坐标中的图像,另存为jpg的实例
2020/03/10 Python
keras输出预测值和真实值方式
2020/06/27 Python
Python 用__new__方法实现单例的操作
2020/12/11 Python
C#中有没有运算符重载?能否使用指针?
2014/05/05 面试题
夜班门卫岗位职责
2013/12/09 职场文书
法制宣传实施方案
2014/03/13 职场文书
签订劳动合同通知书
2015/04/16 职场文书
月考总结与反思
2015/10/22 职场文书
培训心得体会怎么写
2016/01/25 职场文书
golang中切片copy复制和等号复制的区别介绍
2021/04/27 Golang
Python趣味挑战之教你用pygame画进度条
2021/05/31 Python
总结Java对象被序列化的两种方法
2021/06/30 Java/Android