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中正则表达式的用法实例汇总
Aug 18 Python
在Python中marshal对象序列化的相关知识
Jul 01 Python
简单讲解Python中的数字类型及基本的数学计算
Mar 11 Python
django轻松使用富文本编辑器CKEditor的方法
Mar 30 Python
python实现图片处理和特征提取详解
Nov 13 Python
python多任务之协程的使用详解
Aug 26 Python
Python实现图片批量加入水印代码实例
Nov 30 Python
dpn网络的pytorch实现方式
Jan 14 Python
Python3操作读写CSV文件使用包过程解析
Apr 10 Python
python如何随机生成高强度密码
Aug 19 Python
python爬虫中采集中遇到的问题整理
Nov 27 Python
python 管理系统实现mysql交互的示例代码
Dec 06 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
php curl常见错误:SSL错误、bool(false)
2011/12/28 PHP
解析如何用php screw加密php源代码
2013/06/20 PHP
PHP使用PHPMailer发送邮件的简单使用方法
2013/11/12 PHP
php检测url是否存在的方法
2015/04/14 PHP
PHP命名空间namespace的定义方法详解
2017/03/29 PHP
thinkPHP框架实现类似java过滤器的简单方法示例
2018/09/05 PHP
php解决约瑟夫环算法实例分析
2019/09/30 PHP
javascript常用功能汇总
2015/07/05 Javascript
jQuery实现布局高宽自适应的简单实例
2016/05/28 Javascript
jQuery ajax 当async为false时解决同步操作失败的问题
2016/11/18 Javascript
JS中如何实现复选框全选功能
2016/12/19 Javascript
canvas实现图像布局填充功能
2017/02/06 Javascript
深入理解AngularJS中的ng-bind-html指令
2017/03/27 Javascript
使用Require.js封装原生js轮播图的实现代码
2017/06/15 Javascript
ajax请求data遇到的问题分析
2018/01/18 Javascript
WebSocket的通信过程与实现方法详解
2018/04/29 Javascript
Vue.js如何使用Socket.IO的示例代码
2019/09/05 Javascript
JavaScript中的相等操作符使用详解
2019/12/21 Javascript
微信小程序实现签字功能
2019/12/23 Javascript
JavaScript this关键字指向常用情况解析
2020/09/02 Javascript
微信小程序入门之绘制时钟
2020/10/22 Javascript
[48:22]VGJ.S vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python Django模板的使用方法(图文)
2013/11/04 Python
videocapture库制作python视频高速传输程序
2013/12/23 Python
Python写入数据到MP3文件中的方法
2015/07/10 Python
Python中常用操作字符串的函数与方法总结
2016/02/04 Python
pandas DataFrame行或列的删除方法的实现示例
2019/08/02 Python
python numpy数组复制使用实例解析
2020/01/10 Python
python 偷懒技巧——使用 keyboard 录制键盘事件
2020/09/21 Python
css3 旋转按钮 使用CSS3创建一个旋转可变色按钮
2012/12/31 HTML / CSS
秘书行业自我鉴定范文
2013/12/30 职场文书
校友会欢迎辞
2014/01/13 职场文书
学习两会精神心得范文
2014/03/17 职场文书
解除劳动合同证明书模板
2014/11/20 职场文书
2014年管理人员工作总结
2014/12/01 职场文书
合同纠纷调解书
2015/05/20 职场文书