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使用py2exe打包程序介绍
Nov 20 Python
详解Python中for循环的使用
Apr 14 Python
python中global用法实例分析
Apr 30 Python
在Python的Tornado框架中实现简单的在线代理的教程
May 02 Python
Python实现程序的单一实例用法分析
Jun 03 Python
在CMD命令行中运行python脚本的方法
May 12 Python
解决django前后端分离csrf验证的问题
Feb 03 Python
Python 常用模块 re 使用方法详解
Jun 06 Python
Python使用python-docx读写word文档
Aug 26 Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
Oct 21 Python
还在手动盖楼抽奖?教你用Python实现自动评论盖楼抽奖(一)
Jun 07 Python
Pillow图像处理库安装及使用
Apr 12 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
Drupal7 form表单二次开发要点与实例
2014/03/02 PHP
php基于mcrypt的加密解密实例
2014/10/27 PHP
解决laravel中日志权限莫名变成了root的问题
2019/10/17 PHP
JS 控制CSS样式表
2009/08/20 Javascript
jQuery表单验证插件formValidator(改进版)
2012/02/03 Javascript
javascript去除字符串中所有标点符号和提取纯文本的正则
2014/06/07 Javascript
js限制文本框只能输入数字方法小结
2014/06/16 Javascript
Jquery实现仿腾讯娱乐频道焦点图(幻灯片)特效
2015/03/06 Javascript
JavaScript实现添加及删除事件的方法小结
2015/08/04 Javascript
jQuery组件easyui对话框实现代码
2016/08/25 Javascript
JavaScript 判断一个对象{}是否为空对象的简单方法
2016/10/09 Javascript
jquery组件WebUploader文件上传用法详解
2020/10/23 Javascript
Node.JS 循环递归复制文件夹目录及其子文件夹下的所有文件
2017/09/18 Javascript
详解vue项目打包后通过百度的BAE发布到网上的流程
2018/03/05 Javascript
Node.js 进程平滑离场剖析小结
2019/01/24 Javascript
VUE 实现复制内容到剪贴板的两种方法
2019/04/24 Javascript
Smartour 让网页导览变得更简单(推荐)
2019/07/19 Javascript
Vue+Node实现商品列表的分页、排序、筛选,添加购物车功能详解
2019/12/07 Javascript
解决Vue 给mapState中定义的属性赋值报错的问题
2020/06/22 Javascript
JavaScript中clientWidth,offsetWidth,scrollWidth的区别
2021/01/25 Javascript
Python实现批量把SVG格式转成png、pdf格式的代码分享
2014/08/21 Python
python 解决动态的定义变量名,并给其赋值的方法(大数据处理)
2018/11/10 Python
Python3内置模块之base64编解码方法详解
2019/07/13 Python
TensorFlow tf.nn.max_pool实现池化操作方式
2020/01/04 Python
python 一维二维插值实例
2020/04/22 Python
keras 如何保存最佳的训练模型
2020/05/25 Python
虚拟机下载python是否需要联网
2020/07/27 Python
Python爬取某平台短视频的方法
2021/02/08 Python
一篇.NET面试题
2014/09/29 面试题
绘画专业自荐信范文
2014/02/23 职场文书
小学班干部竞选演讲稿
2014/04/24 职场文书
《鲁班和橹板》教学反思
2014/04/27 职场文书
员工评语范文
2014/12/31 职场文书
浅谈Python响应式类库RxPy
2021/06/14 Python
解决Laravel使用验证时跳转到首页的问题
2021/11/17 PHP
解决Mysql报错 Table 'mysql.user' doesn't exist
2022/05/06 MySQL