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 list操作用法总结
Nov 10 Python
Python Xml文件添加字节属性的方法
Mar 31 Python
python 保存float类型的小数的位数方法
Oct 17 Python
Python爬虫文件下载图文教程
Dec 23 Python
总结python中pass的作用
Feb 27 Python
Python深拷贝与浅拷贝用法实例分析
May 05 Python
postman模拟访问具有Session的post请求方法
Jul 15 Python
python opencv 实现对图像边缘扩充
Jan 19 Python
新手入门学习python Numpy基础操作
Mar 02 Python
通过自学python能找到工作吗
Jun 21 Python
python Tornado框架的使用示例
Oct 19 Python
python双向链表实例详解
May 25 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 base64 编码与解码实例代码
2017/03/21 PHP
php+mysql实现的无限分类方法类定义与使用示例
2020/05/27 PHP
jQuery照片伸缩效果不影响其他元素的布局
2014/05/09 Javascript
让alert不出现弹窗的两种方法
2014/05/18 Javascript
JavaScript中的全局对象介绍
2015/01/01 Javascript
javascript中html字符串转化为jquery dom对象的方法
2015/08/27 Javascript
JQuery zClip插件实现复制页面内容到剪贴板
2015/11/02 Javascript
实例代码讲解jquery easyui动态tab页
2015/11/17 Javascript
超漂亮的jQuery图片轮播特效
2015/11/24 Javascript
7个jQuery最佳实践
2016/01/12 Javascript
nodejs实现发出蜂鸣声音(系统报警声)的方法
2017/01/18 NodeJs
Vue.js实战之组件的进阶
2017/04/04 Javascript
react实现换肤功能的示例代码
2018/08/14 Javascript
vue-cli 默认路由再子路由选中下的选中状态问题及解决代码
2018/09/06 Javascript
初试vue-cli使用HBuilderx打包app的坑
2019/07/17 Javascript
vue webpack build资源相对路径的问题及解决方法
2020/06/04 Javascript
nuxt 每个页面head标签内容设置方式
2020/11/05 Javascript
python操作MongoDB基础知识
2013/11/01 Python
利用Python脚本在Nginx和uwsgi上部署MoinMoin的教程
2015/05/05 Python
python爬虫爬取快手视频多线程下载功能
2018/02/28 Python
Django实现分页功能
2018/07/02 Python
Python判断中文字符串是否相等的实例
2018/07/06 Python
Python使用folium excel绘制point
2019/01/03 Python
Django发送邮件和itsdangerous模块的配合使用解析
2019/08/10 Python
django跳转页面传参的实现
2020/09/17 Python
CSS3 新增选择器的实例
2019/11/13 HTML / CSS
欧铁通票官方在线销售网站:Eurail.com
2017/10/14 全球购物
什么是会话Bean
2015/05/14 面试题
如何理解transaction事务的概念
2015/05/27 面试题
2013英文求职信模板范文
2013/11/15 职场文书
诚信承诺书范文
2014/03/27 职场文书
机关副主任个人四风问题整改措施
2014/09/26 职场文书
2015年新教师工作总结
2015/04/28 职场文书
Python利用FlashText算法实现替换字符串
2022/03/31 Python
Java8 CompletableFuture 异步回调
2022/04/28 Java/Android
教你win10系统中APPCRASH事件问题解决方法
2022/07/15 数码科技