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脚本将绝对url替换为相对url的教程
Apr 24 Python
Python实现截屏的函数
Jul 26 Python
Python中is与==判断的区别
Mar 28 Python
Python3远程监控程序的实现方法
Jul 15 Python
解决pyshp UnicodeDecodeError的问题
Dec 06 Python
tensorflow查看ckpt各节点名称实例
Jan 21 Python
Python爬虫爬取、解析数据操作示例
Mar 27 Python
Python接收手机短信的代码整理
Aug 02 Python
python实现测试工具(二)——简单的ui测试工具
Oct 19 Python
python对 MySQL 数据库进行增删改查的脚本
Oct 22 Python
Python爬虫实战案例之爬取喜马拉雅音频数据详解
Dec 07 Python
浅谈Python中对象是如何被调用的
Apr 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+jquery编码方面的一些心得(utf-8 gb2312)
2010/10/12 PHP
10款实用的PHP开源工具
2015/10/23 PHP
Laravel Reponse响应客户端示例详解
2020/09/03 PHP
javascript Prototype 对象扩展
2009/05/15 Javascript
Colortip基于jquery的信息提示框插件在IE6下面的显示问题修正方法
2010/12/06 Javascript
jQuery 在光标定位的地方插入文字的插件
2012/05/10 Javascript
jqGrid日期格式的判断示例代码(开始日期与结束日期)
2013/11/08 Javascript
js定时器的使用(实例讲解)
2014/01/06 Javascript
BootStrap Tooltip插件源码解析
2016/12/27 Javascript
微信小程序 自定义对话框实例详解
2017/01/20 Javascript
jQuery Autocomplete简介_动力节点Java学院整理
2017/07/17 jQuery
详解http访问解析流程原理
2017/10/18 Javascript
JavaScript实现获取select下拉框中第一个值的方法
2018/02/06 Javascript
在vue项目中引入highcharts图表的方法(详解)
2018/03/05 Javascript
layerUI下的绑定事件实例代码
2018/08/17 Javascript
详解多页应用 Webpack4 配置优化与踩坑记录
2018/10/16 Javascript
详解VUE里子组件如何获取父组件动态变化的值
2018/12/26 Javascript
Python中unittest用法实例
2014/09/25 Python
python读写二进制文件的方法
2015/05/09 Python
用Python实现命令行闹钟脚本实例
2016/09/05 Python
python 中if else 语句的作用及示例代码
2018/03/05 Python
详解TensorFlow查看ckpt中变量的几种方法
2018/06/19 Python
Django之模型层多表操作的实现
2019/01/08 Python
解决tensorflow由于未初始化变量而导致的错误问题
2020/01/06 Python
Pytest如何使用skip跳过执行测试
2020/08/13 Python
CSS Grid布局教程之网格单元格布局
2014/12/30 HTML / CSS
移动HTML5前端框架—MUI的使用
2017/12/18 HTML / CSS
雅诗兰黛(Estee Lauder)英国官方网站:世界顶级化妆品牌
2016/12/29 全球购物
美国休闲服装品牌:J.Crew Factory
2017/03/04 全球购物
kfc实习自我鉴定
2013/12/14 职场文书
行政人事岗位职责
2014/03/17 职场文书
机关党总支领导班子整改方案
2014/09/20 职场文书
单位授权委托书范本
2014/09/26 职场文书
领导班子在批评与自我批评座谈会上的发言
2014/09/28 职场文书
工作证明英文模板
2014/10/21 职场文书
幽灵公主观后感
2015/06/09 职场文书