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 相关文章推荐
pandas.DataFrame.to_json按行转json的方法
Jun 05 Python
深入浅析Python2.x和3.x版本的主要区别
Nov 30 Python
Python随机生成身份证号码及校验功能
Dec 04 Python
Python 获取div标签中的文字实例
Dec 20 Python
计算机二级python学习教程(2) python语言基本语法元素
May 16 Python
PyCharm 配置远程python解释器和在本地修改服务器代码
Jul 23 Python
pygame实现五子棋游戏
Oct 29 Python
python 项目目录结构设置
Feb 14 Python
python-sys.stdout作为默认函数参数的实现
Feb 21 Python
Python图像处理库PIL的ImageFont模块使用介绍
Feb 26 Python
Django调用百度AI接口实现人脸注册登录代码实例
Apr 23 Python
Python 爬取淘宝商品信息栏目的实现
Feb 06 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 单引号与双引号的区别
2009/11/24 PHP
memcached 和 mysql 主从环境下php开发代码详解
2010/05/16 PHP
采用ThinkPHP中F方法实现快速缓存实例
2014/06/13 PHP
php生成zip文件类实例
2015/04/07 PHP
实例介绍PHP中zip_open()函数用法
2019/02/15 PHP
php use和include区别总结
2019/10/13 PHP
mouse_on_title.js
2006/08/25 Javascript
用javascript实现的激活输入框后隐藏初始内容
2007/06/29 Javascript
IE的fireEvent方法概述及应用
2013/02/22 Javascript
jquery触发a标签跳转事件示例代码
2013/07/21 Javascript
理解jQuery stop()方法
2014/11/21 Javascript
学习JavaScript设计模式之中介者模式
2016/01/14 Javascript
JavaScript中关联原型链属性特性
2016/02/13 Javascript
详解JSONObject和JSONArray区别及基本用法
2017/10/25 Javascript
详解vue中axios的封装
2018/07/18 Javascript
layui的table中显示图片方法
2018/08/17 Javascript
js实现移动端轮播图
2020/12/21 Javascript
微信小程序实现下拉框功能
2019/07/16 Javascript
解决vue elementUI中table里数字、字母、中文混合排序问题
2020/01/07 Javascript
js防抖函数和节流函数使用场景和实现区别示例分析
2020/04/11 Javascript
jquery+css3实现的经典弹出层效果示例
2020/05/16 jQuery
vue在图片上传的时候压缩图片
2020/11/18 Vue.js
Python解析excel文件存入sqlite数据库的方法
2016/11/15 Python
使用Python实现跳一跳自动跳跃功能
2019/07/10 Python
使用OpenCV校准鱼眼镜头的方法
2020/11/26 Python
CSS3 旋转立方体问题详解
2020/01/09 HTML / CSS
分享29个基于Bootstrap的HTML5响应式网页设计模板
2015/11/19 HTML / CSS
无畏的旅行:Intrepid Travel
2017/12/20 全球购物
澳大利亚婴儿、幼儿和儿童在线设计师商店:Smooch Baby
2019/02/16 全球购物
英语专业毕业生自我鉴定
2013/11/09 职场文书
承认错误的检讨书
2014/01/30 职场文书
优乐美广告词
2014/03/14 职场文书
2014普法依法治理工作总结
2014/12/18 职场文书
英语教师个人总结
2015/02/09 职场文书
优秀党员个人总结
2015/02/14 职场文书
员工聘用合同范本
2015/09/21 职场文书