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使用 HTMLTestRunner.py生成测试报告
Oct 20 Python
Python 实现使用dict 创建二维数据、DataFrame
Apr 13 Python
利用PyCharm Profile分析异步爬虫效率详解
May 08 Python
python celery分布式任务队列的使用详解
Jul 08 Python
在python中实现同行输入/接收多个数据的示例
Jul 20 Python
python3 requests库文件上传与下载实现详解
Aug 22 Python
Python API len函数操作过程解析
Mar 05 Python
Python生成器常见问题及解决方案
Mar 21 Python
python3.6.5基于kerberos认证的hive和hdfs连接调用方式
Jun 06 Python
Python根据指定文件生成XML的方法
Jun 29 Python
python如何实时获取tcpdump输出
Sep 16 Python
Pandas实现批量拆分与合并Excel的示例代码
May 30 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世纪万年历
2006/12/06 PHP
献给php初学者(入门学习经验谈)
2010/10/12 PHP
php session_start()出错原因分析及解决方法
2013/10/28 PHP
javascript window对象属性整理
2009/10/24 Javascript
为JavaScript提供睡眠功能(sleep) 自编译JS引擎
2010/08/16 Javascript
js下通过getList函数实现分页效果的代码
2010/09/17 Javascript
javascript数组去掉重复
2011/05/12 Javascript
JavaScript可否多线程? 深入理解JavaScript定时机制
2012/05/23 Javascript
jQuery中$.fn的用法示例介绍
2013/11/05 Javascript
jQuery实现鼠标经过图片预览大图效果
2014/04/10 Javascript
JS通过ajax动态读取xml文件内容的方法
2015/03/24 Javascript
JavaScript获取表单内所有元素值的方法
2015/04/02 Javascript
window.onload与$(document).ready()的区别分析
2015/05/30 Javascript
AngularJS中的Directive自定义一个表格
2016/01/25 Javascript
jQuery短信验证倒计时功能实现方法详解
2016/05/25 Javascript
AngularJS 入门教程之HTML DOM实例详解
2016/07/28 Javascript
微信小程序之仿微信漂流瓶实例
2016/12/09 Javascript
JavaScript与JQUERY获取元素的宽、高和位置
2017/02/26 Javascript
用原生JS实现简单的多选框功能
2017/06/12 Javascript
基于react组件之间的参数传递(详解)
2017/09/05 Javascript
node中的session的具体使用
2018/09/14 Javascript
vue实现菜单切换功能
2019/05/08 Javascript
vue 实现强制类型转换 数字类型转为字符串
2019/11/07 Javascript
详解Python的collections模块中的deque双端队列结构
2016/07/07 Python
Python设计实现的计算器功能完整实例
2017/08/18 Python
Python 将Matrix、Dict保存到文件的方法
2018/10/30 Python
强悍的Python读取大文件的解决方案
2019/02/16 Python
python进程和线程用法知识点总结
2019/05/28 Python
10行Python代码计算汽车数量的实现方法
2019/10/23 Python
python爬取2021猫眼票房字体加密实例
2021/02/19 Python
小区停车场管理制度
2014/01/27 职场文书
医院党员公开承诺书
2014/08/30 职场文书
写给医院的感谢信
2015/01/22 职场文书
谢师宴家长致辞
2015/07/27 职场文书
代码解析React中setState同步和异步问题
2021/06/03 Javascript
MySQL图形化管理工具Navicat安装步骤
2021/12/04 MySQL