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+Selenium+PIL+Tesseract自动识别验证码进行一键登录
Sep 20 Python
基于DataFrame筛选数据与loc的用法详解
May 18 Python
Flask框架配置与调试操作示例
Jul 23 Python
python存储16bit和32bit图像的实例
Dec 05 Python
python读取txt文件,去掉空格计算每行长度的方法
Dec 20 Python
对python 自定义协议的方法详解
Feb 13 Python
Python3.7 读取 mp3 音频文件生成波形图效果
Nov 05 Python
Python利用Xpath选择器爬取京东网商品信息
Jun 01 Python
Python3开发环境搭建详细教程
Jun 18 Python
Python实现AES加密,解密的两种方法
Oct 03 Python
只用20行Python代码实现屏幕录制功能
Jun 02 Python
Python实现制作销售数据可视化看板详解
Nov 27 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/08/05 PHP
php中通过DirectoryIterator删除整个目录的方法
2015/03/13 PHP
PHP实现通过strace定位故障原因的方法
2018/04/29 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
tbody元素支持嵌套的注意方法
2007/03/24 Javascript
javascript 类定义的4种方法
2009/09/12 Javascript
checkbox设置复选框的只读效果不让用户勾选
2013/08/12 Javascript
JavaScript子类用Object.getPrototypeOf去调用父类方法解析
2013/12/05 Javascript
jQuery实现仿美橙互联两级导航菜单的方法
2015/03/09 Javascript
TypeScript Type Innference(类型判断)
2016/03/10 Javascript
新手必须知的Node.js 4个JavaScript基本概念
2018/09/16 Javascript
微信小程序访问豆瓣电影api的实现方法
2019/03/31 Javascript
10个最受欢迎的 JavaScript框架(推荐)
2019/04/24 Javascript
Vue.use()在new Vue() 之前使用的原因浅析
2019/08/26 Javascript
如何利用javascript接收json信息并进行处理
2020/08/06 Javascript
Python中的两个内置模块介绍
2015/04/05 Python
python 远程统计文件代码分享
2015/05/14 Python
PyCharm使用教程之搭建Python开发环境
2016/06/07 Python
Python复数属性和方法运算操作示例
2017/07/21 Python
Python实现霍夫圆和椭圆变换代码详解
2018/01/12 Python
对python周期性定时器的示例详解
2019/02/19 Python
详解Numpy数组转置的三种方法T、transpose、swapaxes
2019/05/27 Python
对Python中小整数对象池和大整数对象池的使用详解
2019/07/09 Python
Django中create和save方法的不同
2019/08/13 Python
python爬虫 基于requests模块发起ajax的get请求实现解析
2019/08/20 Python
css3绘制百度的小度熊
2018/10/29 HTML / CSS
html5定位并在百度地图上显示的示例
2014/04/27 HTML / CSS
Marks & Spencer爱尔兰:英国马莎百货
2016/04/20 全球购物
PHP开发的一般流程
2013/08/13 面试题
大门门卫岗位职责
2013/11/30 职场文书
大队干部竞选演讲稿
2014/04/28 职场文书
《梅花魂》教学反思
2014/04/30 职场文书
网聊搭讪开场白
2015/05/28 职场文书
致接力运动员加油稿
2015/07/21 职场文书
创业计划书之青年旅馆
2019/09/23 职场文书
通过feDisplacementMap和feImage实现水波特效
2022/04/24 HTML / CSS