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中操作字典之fromkeys()方法的使用
May 21 Python
Python爬取国外天气预报网站的方法
Jul 10 Python
Python列表删除的三种方法代码分享
Oct 31 Python
简单的python协同过滤程序实例代码
Jan 31 Python
Python封装原理与实现方法详解
Aug 28 Python
解决vscode python print 输出窗口中文乱码的问题
Dec 03 Python
python3 中的字符串(单引号、双引号、三引号)以及字符串与数字的运算
Jul 18 Python
详解使用Python下载文件的几种方法
Oct 13 Python
python @propert装饰器使用方法原理解析
Dec 25 Python
利用python绘制中国地图(含省界、河流等)
Sep 21 Python
django中ImageField的使用详解
Dec 21 Python
Python的三个重要函数详解
Jan 18 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 print类函数使用总结
2010/06/25 PHP
php实现在多维数组中查找特定value的方法
2015/07/29 PHP
PHP邮件群发机实现代码
2016/02/16 PHP
thinkphp5框架前后端分离项目实现分页功能的方法分析
2019/10/08 PHP
jquery 获取json数据实现代码
2009/04/27 Javascript
node.js实现爬虫教程
2020/08/25 Javascript
Angular2 环境配置详细介绍
2016/09/21 Javascript
js本地图片预览实现代码
2016/10/09 Javascript
Vue-Access-Control 前端用户权限控制解决方案
2017/12/01 Javascript
vue 不使用select实现下拉框功能(推荐)
2018/05/17 Javascript
angular6.0开发教程之如何安装angular6.0框架
2018/06/29 Javascript
Django+Vue跨域环境配置详解
2018/07/06 Javascript
vue项目刷新当前页面的三种方法
2018/12/04 Javascript
详解vue-cli 脚手架 安装
2019/04/16 Javascript
vue.js多页面开发环境搭建过程
2019/04/24 Javascript
Windows下安装python MySQLdb遇到的问题及解决方法
2017/03/16 Python
python实现m3u8格式转换为mp4视频格式
2018/02/28 Python
用Python+OpenCV对比图像质量的几种方法
2019/07/15 Python
Django 静态文件配置过程详解
2019/07/23 Python
Python 字符串、列表、元组的截取与切片操作示例
2019/09/17 Python
python 图片二值化处理(处理后为纯黑白的图片)
2019/11/01 Python
Django 项目布局方法(值得推荐)
2020/03/22 Python
解决Python中导入自己写的类,被划红线,但不影响执行的问题
2020/07/13 Python
英国最大的百货公司:Harrods
2016/08/18 全球购物
夏洛特和乔治婴儿和儿童时装精品店:Charlotte and George
2018/06/06 全球购物
Coltorti Boutique官网:来自意大利的设计师品牌买手店
2018/11/09 全球购物
土建资料员岗位职责
2014/01/04 职场文书
活动总结报告怎么写
2014/07/03 职场文书
讲党性心得体会
2014/09/03 职场文书
授权委托书(法人单位用)
2014/09/29 职场文书
2014年终个人工作总结
2014/11/07 职场文书
2014年便民服务中心工作总结
2014/12/20 职场文书
车辆管理制度范本
2015/08/05 职场文书
Python 的 sum() Pythonic 的求和方法详细
2021/10/16 Python
MongoDB连接数据库并创建数据等使用方法
2021/11/27 MongoDB
CentOS7 minimal 最小化安装网络设置过程
2022/12/24 Servers