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 相关文章推荐
tensorflow 打印内存中的变量方法
Jul 30 Python
Django添加KindEditor富文本编辑器的使用
Oct 24 Python
Python 根据日志级别打印不同颜色的日志的方法示例
Aug 08 Python
Django实现文件上传下载
Oct 06 Python
python下载库的步骤方法
Oct 12 Python
python单向链表的基本实现与使用方法【定义、遍历、添加、删除、查找等】
Oct 24 Python
django修改models重建数据库的操作
Mar 31 Python
pygame实现弹球游戏
Apr 14 Python
opencv 实现特定颜色线条提取与定位操作
Jun 02 Python
Python字符串split及rsplit方法原理详解
Jun 29 Python
python opencv实现简易画图板
Aug 27 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
Dec 11 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/10/09 PHP
利用PHP创建动态图像
2006/10/09 PHP
PHP 线程安全与非线程安全版本的区别深入解析
2013/08/06 PHP
PHP简单实现数字分页功能示例
2016/08/24 PHP
php redis实现对200w用户的即时推送
2017/03/04 PHP
利用PHP如何统计Nginx日志的User Agent数据
2019/03/06 PHP
PHP设计模式之单例模式定义与用法分析
2019/03/26 PHP
IE下JS读取xml文件示例代码
2013/08/05 Javascript
详解AngularJS中的作用域
2015/06/17 Javascript
js window对象属性和方法相关资料整理
2015/11/11 Javascript
jquery实现网站列表切换效果的2种方法
2016/08/12 Javascript
Vue.js render方法使用详解
2017/04/05 Javascript
angular动态表单制作
2018/02/23 Javascript
javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
2018/08/01 Javascript
基于Vue2实现简易的省市区县三级联动组件效果
2018/11/05 Javascript
vue-cli 项目打包完成后运行文件路径报错问题
2019/07/19 Javascript
通过原生vue添加滚动加载更多功能
2019/11/21 Javascript
Python中__init__和__new__的区别详解
2014/07/09 Python
用Python解析XML的几种常见方法的介绍
2015/04/09 Python
python定时检查某个进程是否已经关闭的方法
2015/05/20 Python
python文件特定行插入和替换实例详解
2017/07/12 Python
解决Pycharm运行时找不到文件的问题
2018/10/29 Python
使用 Visual Studio Code(VSCode)搭建简单的Python+Django开发环境的方法步骤
2018/12/17 Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
2019/06/05 Python
Python编写一个验证码图片数据标注GUI程序附源码
2019/12/09 Python
Python3查找列表中重复元素的个数的3种方法详解
2020/02/13 Python
浅谈在django中使用redirect重定向数据传输的问题
2020/03/13 Python
浅谈pytorch中的BN层的注意事项
2020/06/23 Python
Python pexpect模块及shell脚本except原理解析
2020/08/03 Python
Python中的面向接口编程示例详解
2021/01/17 Python
AmazeUI 缩略图的实现示例
2020/08/18 HTML / CSS
英国护肤品购物网站:Beauty Expert
2016/08/19 全球购物
John Hardy官方网站:手工设计首饰的奢侈品牌
2017/07/05 全球购物
高中毕业自我鉴定
2013/12/22 职场文书
创建文明城市标语
2014/06/16 职场文书
Apache Pulsar集群搭建部署详细过程
2022/02/12 Servers