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利用pyHook实现监听用户鼠标与键盘事件
Aug 21 Python
Python解析网页源代码中的115网盘链接实例
Sep 30 Python
使用Python抓取模板之家的CSS模板
Mar 16 Python
python通过定义一个类实例作为ftp回调方法
May 04 Python
Python使用ftplib实现简易FTP客户端的方法
Jun 03 Python
详解Python的Twisted框架中reactor事件管理器的用法
May 25 Python
Python cookbook(数据结构与算法)从任意长度的可迭代对象中分解元素操作示例
Feb 13 Python
python使用插值法画出平滑曲线
Dec 15 Python
Python字典推导式将cookie字符串转化为字典解析
Aug 10 Python
parser.add_argument中的action使用
Apr 20 Python
python 实现图像快速替换某种颜色
Jun 04 Python
深入了解Python 变量作用域
Jul 24 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截取字符串并保留完整xml标签的函数代码
2013/02/06 PHP
PHP 利用Mail_MimeDecode类提取邮件信息示例
2014/01/26 PHP
php判断电脑访问、手机访问的例子
2014/05/10 PHP
PHP 5.3新增魔术方法__invoke概述
2014/07/23 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
提高代码性能技巧谈—以创建千行表格为例
2006/07/01 Javascript
javascript中注册和移除事件的4种方式
2013/03/20 Javascript
js和as的稳定传值问题解决
2013/07/14 Javascript
js面向对象编程之如何实现方法重载
2014/07/02 Javascript
JavaScript处理解析JSON数据过程详解
2015/09/11 Javascript
javascript正则表达式定义(语法)总结
2016/01/08 Javascript
Vue中计算属性computed的示例解读
2017/07/26 Javascript
javascript基础进阶_深入剖析执行环境及作用域链
2017/09/05 Javascript
Vue项目分环境打包的实现步骤
2018/04/02 Javascript
Vue实现点击按钮复制文本内容的例子
2019/11/09 Javascript
[02:32]【DOTA2亚洲邀请赛】iceice,梦开始的地方
2017/03/13 DOTA
爬山算法简介和Python实现实例
2014/04/26 Python
Python多线程编程(六):可重入锁RLock
2015/04/05 Python
python基于pygame实现响应游戏中事件的方法(附源码)
2015/11/11 Python
Python每天必学之bytes字节
2016/01/28 Python
使用Python编写基于DHT协议的BT资源爬虫
2016/03/19 Python
python 获取一个值在某个区间的指定倍数的值方法
2018/11/12 Python
Apache,wsgi,django 程序部署配置方法详解
2019/07/01 Python
Python找出列表中出现次数最多的元素三种方式
2020/02/24 Python
win10从零安装配置pytorch全过程图文详解
2020/05/08 Python
Python 没有main函数的原因
2020/07/10 Python
美国最大婚纱连锁店运营商:David’s Bridal
2019/03/12 全球购物
德国富尔达运动鞋店:43einhalb
2020/12/25 全球购物
水污染治理工程专业求职信
2014/06/14 职场文书
四风专项整治工作情况汇报
2014/10/28 职场文书
立项申请报告范本
2015/05/15 职场文书
美丽的大脚观后感
2015/06/03 职场文书
2016年幼儿园教研活动总结
2016/04/05 职场文书
Canvas跟随鼠标炫彩小球的实现
2021/04/11 Javascript
tensorboard 可视化之localhost:6006不显示的解决方案
2021/05/22 Python
PyTorch 如何自动计算梯度
2021/05/23 Python