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 相关文章推荐
Python2.x中str与unicode相关问题的解决方法
Mar 30 Python
对python append 与浅拷贝的实例讲解
May 04 Python
浅谈python 导入模块和解决文件句柄找不到问题
Dec 15 Python
python3 json数据格式的转换(dumps/loads的使用、dict to str/str to dict、json字符串/字典的相互转换)
Apr 01 Python
django 单表操作实例详解
Jul 30 Python
ORM Django 终端打印 SQL 语句实现解析
Aug 09 Python
Python实现子类调用父类的初始化实例
Mar 12 Python
django 读取图片到页面实例
Mar 27 Python
Python celery原理及运行流程解析
Jun 13 Python
详解pytorch tensor和ndarray转换相关总结
Sep 03 Python
Python合并pdf文件的工具
Jul 01 Python
Python可变与不可变数据和深拷贝与浅拷贝
Apr 06 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使用gettimeofday函数返回当前时间并存放在关联数组里
2015/03/19 PHP
php技术实现加载字体并保存成图片
2015/07/27 PHP
PHP使用strstr()函数获取指定字符串后所有字符的方法
2016/01/07 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
PHP面向对象五大原则之开放-封闭原则(OCP)详解
2018/04/04 PHP
PHP文件类型检查及fileinfo模块安装使用详解
2019/05/09 PHP
JQuery Highcharts 动态生成图表的方法
2013/11/15 Javascript
一款基jquery超炫的动画导航菜单可响应单击事件
2014/11/02 Javascript
JavaScript 作用域链解析
2014/11/13 Javascript
在Javascript中处理数组之toSource()方法的使用
2015/06/09 Javascript
JavaScript中用let语句声明作用域的用法讲解
2016/05/20 Javascript
JS不用正则验证输入的字符串是否为空(包含空格)的实现代码
2016/06/14 Javascript
JS实现动态表格的添加,修改,删除功能(推荐)
2016/06/15 Javascript
jQuery ajax方法传递中文时出现中文乱码的解决方法
2016/07/25 Javascript
jquery+Jscex打造游戏力度条
2020/09/12 Javascript
js编写三级联动简单案例
2016/12/21 Javascript
JavaScript 函数的定义-调用、注意事项
2017/04/16 Javascript
React-Native左右联动List的示例代码
2017/09/21 Javascript
layui问题之自动滚动二级iframe页面到指定位置的方法
2019/09/18 Javascript
微信小程序基于高德地图查找位置并显示文字
2019/10/30 Javascript
javascript实现滚动条效果
2020/03/24 Javascript
python pandas修改列属性的方法详解
2018/06/09 Python
python实现银联支付和支付宝支付接入
2019/05/07 Python
Python 使用threading+Queue实现线程池示例
2019/12/21 Python
opencv resize图片为正方形尺寸的实现方法
2019/12/26 Python
使用jupyter Nodebook查看函数或方法的参数以及使用情况
2020/04/14 Python
翻转数列python实现,求前n项和,并能输出整个数列的案例
2020/05/03 Python
Python网页解析器使用实例详解
2020/05/30 Python
基于Keras中Conv1D和Conv2D的区别说明
2020/06/19 Python
pytorch中的weight-initilzation用法
2020/06/24 Python
css3中background新增的4个新的相关属性用法介绍
2013/09/26 HTML / CSS
html5 跨文档消息传输示例探讨
2013/04/01 HTML / CSS
伊莱克斯阿根廷网上商店:Tienda Electrolux
2021/03/08 全球购物
心理健康课教学反思
2014/02/13 职场文书
大学生自荐信怎么写
2015/03/26 职场文书
中秋节英文祝福语句(14句)
2019/09/11 职场文书