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中的fileinput模块的简单实用示例
Jul 09 Python
Python get获取页面cookie代码实例
Sep 12 Python
python实现大转盘抽奖效果
Jan 22 Python
解决Pandas的DataFrame输出截断和省略的问题
Feb 08 Python
Python爬虫实现爬取百度百科词条功能实例
Apr 05 Python
python字符串替换第一个字符串的方法
Jun 26 Python
超全Python图像处理讲解(多模块实现)
Apr 13 Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
Jun 10 Python
基于Python爬取京东双十一商品价格曲线
Oct 23 Python
python的列表生成式,生成器和generator对象你了解吗
Mar 16 Python
使用python绘制分组对比柱状图
Apr 21 Python
Python 文字识别
May 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
Windows2003 下 MySQL 数据库每天自动备份
2006/12/21 PHP
PHP使用preg_split和explode分割textarea存放内容的方法分析
2017/07/03 PHP
javascript得到XML某节点的子节点个数的脚本
2008/10/11 Javascript
jquery与google map api结合使用 控件,监听器
2010/03/04 Javascript
基于Jquery的标签智能验证实现代码
2010/12/27 Javascript
jQuery ui 利用 datepicker插件实现开始日期(minDate)和结束日期(maxDate)
2014/05/22 Javascript
js使用Array.prototype.sort()对数组对象排序的方法
2015/01/28 Javascript
浅谈js中变量初始化
2015/02/03 Javascript
Jquery 垂直多级手风琴菜单附源码下载
2015/11/17 Javascript
jQuery事件绑定用法详解(附bind和live的区别)
2016/01/19 Javascript
Angularjs实现带查找筛选功能的select下拉框示例代码
2016/10/04 Javascript
jQuery插件WebUploader实现文件上传
2016/11/07 Javascript
Vue-Access-Control 前端用户权限控制解决方案
2017/12/01 Javascript
Python 用户登录验证的小例子
2013/03/06 Python
在Python web中实现验证码图片代码分享
2017/11/09 Python
Python2.7.10以上pip更新及其他包的安装教程
2018/06/12 Python
python实现Zabbix-API监控
2018/09/17 Python
详解CSS3选择器的使用方法汇总
2015/11/24 HTML / CSS
利用CSS3动画实现圆圈由小变大向外扩散的效果实例
2018/09/10 HTML / CSS
HTML5 canvas基本绘图之绘制矩形
2016/06/27 HTML / CSS
描述一下JVM加载class文件的原理机制
2013/12/08 面试题
财务管理专业应届毕业生求职信
2013/09/22 职场文书
大学生求职推荐信
2013/11/27 职场文书
六一儿童节活动策划方案
2014/01/27 职场文书
文化与传播毕业生求职信
2014/03/09 职场文书
致共产党员倡议书
2014/04/16 职场文书
幼儿园大班家长评语
2014/04/17 职场文书
教师党员公开承诺事项
2014/05/28 职场文书
团队激励口号
2014/06/06 职场文书
政风行风评议整改方案
2014/09/15 职场文书
党员检讨书
2014/10/13 职场文书
入党积极分子对十八届四中全会期盼的思想汇报
2014/10/17 职场文书
2015年试用期工作总结
2014/12/12 职场文书
2015年幼儿园卫生保健工作总结
2015/05/12 职场文书
高二数学教学反思
2016/02/18 职场文书
Python实现机器学习算法的分类
2021/06/03 Python