Python Django框架防御CSRF攻击的方法分析


Posted in Python onOctober 18, 2019

本文实例讲述了Python Django框架防御CSRF攻击的方法。分享给大家供大家参考,具体如下:

项目名/settings.py(项目配置,csrf中间件配置):

MIDDLEWARE_CLASSES = (
  'django.contrib.sessions.middleware.SessionMiddleware',
  'django.middleware.common.CommonMiddleware',
  'django.middleware.csrf.CsrfViewMiddleware', # django默认启用了csrf防护,只针对post表单提交进行防护。
  'django.contrib.auth.middleware.AuthenticationMiddleware',
  'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
  'django.contrib.messages.middleware.MessageMiddleware',
  'django.middleware.clickjacking.XFrameOptionsMiddleware',
  'django.middleware.security.SecurityMiddleware',
)

templates/应用名/demo.html(模板文件,csrf防护):

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>修改密码页面</title>
</head>
<body>
<form method="post" action="/change_pwd_action">
  {% csrf_token %} {# csrf_token是Django提供的,用于csrf防护。该变量会替换成一个表单隐藏域。 #}
  新密码:<input type="password" name="pwd">
  <input type="submit" value="确认修改">
</form>
</body>
</html>

django防止csrf攻击的方式:

1) 默认打开csrf中间件。

2) 表单post提交数据时加上{% csrf_token %}标签。

防御原理:

  1. 渲染模板文件时在页面生成一个名字叫做csrfmiddlewaretoken的隐藏域。
  2. 服务器交给浏览器保存一个名字为csrftoken的cookie信息。
  3. 提交表单时,两个值都会发给服务器,服务器进行比对,如果一样,则csrf验证通过,否则失败。

希望本文所述对大家基于Django框架的Python程序设计有所帮助。

Python 相关文章推荐
python连接mysql数据库示例(做增删改操作)
Dec 31 Python
Python中使用插入排序算法的简单分析与代码示例
May 04 Python
WINDOWS 同时安装 python2 python3 后 pip 错误的解决方法
Mar 16 Python
Python 实现链表实例代码
Apr 07 Python
Python 自动化表单提交实例代码
Jun 08 Python
在Pycharm中设置默认自动换行的方法
Jan 16 Python
Python中的十大图像处理工具(小结)
Jun 10 Python
详解Django 时间与时区设置问题
Jul 23 Python
python实现DEM数据的阴影生成的方法
Jul 23 Python
python框架django项目部署相关知识详解
Nov 04 Python
python GUI库图形界面开发之PyQt5窗口类QMainWindow详细使用方法
Feb 26 Python
python Socket网络编程实现C/S模式和P2P
Jun 22 Python
python使用matplotlib绘制雷达图
Oct 18 #Python
Python 日志logging模块用法简单示例
Oct 18 #Python
python调用matplotlib模块绘制柱状图
Oct 18 #Python
Python Django模板之模板过滤器与自定义模板过滤器示例
Oct 18 #Python
树莓派4B+opencv4+python 打开摄像头的实现方法
Oct 18 #Python
python使用Matplotlib改变坐标轴的默认位置
Oct 18 #Python
python调用Matplotlib绘制分布点图
Oct 18 #Python
You might like
150kHz到30Mhz完全冲浪手册
2020/03/20 无线电
基于PHP读取TXT文件向数据库导入海量数据的方法
2013/04/23 PHP
ThinkPHP打开验证码页面显示乱码的解决方法
2014/12/18 PHP
PHP实时统计中文字数和区别
2019/02/28 PHP
用Javascript实现UTF8编码转换成gb2312编码
2006/12/22 Javascript
javascript 表单的友好用户体现
2009/01/07 Javascript
5个javascript的数字格式化函数分享
2011/12/07 Javascript
jquery ajax提交整个表单元素的快捷办法
2013/03/27 Javascript
jQuery实现等比例缩放大图片让大图片自适应页面布局
2013/10/16 Javascript
Bootstrap每天必学之简单入门
2015/11/19 Javascript
Jquery 自定义事件实现发布/订阅的简单实例
2016/06/12 Javascript
echarts3 使用总结(绘制各种图表,地图)
2017/01/05 Javascript
js实现移动端微信页面禁止字体放大
2017/02/16 Javascript
vue-cli2.x项目优化之引入本地静态库文件的方法
2018/06/19 Javascript
详解关于vue2.0工程发布上线操作步骤
2018/09/27 Javascript
Node.js EventEmmitter事件监听器用法实例分析
2019/01/07 Javascript
Centos7 安装Node.js10以上版本的方法步骤
2019/10/15 Javascript
如何使用 vue-cli 创建模板项目
2020/11/19 Vue.js
js删除对象中的某一个字段的方法实现
2021/01/11 Javascript
[00:35]2016完美“圣”典风云人物:冷冷宣传片
2016/12/08 DOTA
python快速查找算法应用实例
2014/09/26 Python
Python如何快速实现分布式任务
2017/07/06 Python
python实现二分查找算法
2017/09/21 Python
Python 获取div标签中的文字实例
2018/12/20 Python
Python 静态方法和类方法实例分析
2019/11/21 Python
Python字符编码转码之GBK,UTF8互转
2020/02/09 Python
python 三种方法实现对Excel表格的读写
2020/11/19 Python
HelloFresh奥地利:立即订购烹饪盒
2019/02/22 全球购物
荷兰天然和有机产品网上商城:BigGreenSmile.nl
2020/07/26 全球购物
加拿大著名的奢侈品购物网站:SSENSE(支持中文)
2020/06/25 全球购物
电子商务专业实习生自我鉴定
2013/09/24 职场文书
节约能源标语
2014/06/17 职场文书
学校做一个有道德的人活动方案
2014/08/23 职场文书
战马观后感
2015/06/08 职场文书
详解php中流行的rpc框架
2021/05/29 PHP
使用 Apache Superset 可视化 ClickHouse 数据的两种方法
2021/07/07 Servers