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数据库的脚本代码
Jun 10 Python
Python原始字符串(raw strings)用法实例
Oct 13 Python
Python生成随机MAC地址
Mar 10 Python
基于Python log 的正确打开方式
Apr 28 Python
解决使用pycharm提交代码时冲突之后文件丢失找回的方法
Aug 05 Python
对python pandas 画移动平均线的方法详解
Nov 28 Python
python批量创建指定名称的文件夹
Mar 21 Python
python实现字符串加密 生成唯一固定长度字符串
Mar 22 Python
Django密码存储策略分析
Jan 09 Python
Pycharm安装python库的方法
Nov 24 Python
python基础之爬虫入门
May 10 Python
pytorch 如何使用amp进行混合精度训练
May 24 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公用函数列表[正则]
2007/02/22 PHP
php实现按文件名搜索文件的远程文件查找器
2014/05/10 PHP
php生成二维码时出现中文乱码的解决方法
2014/12/18 PHP
php json_encode与json_decode详解及实例
2016/12/13 PHP
js操纵跨frame的三级联动select下拉选项实例介绍
2013/05/19 Javascript
父页面显示遮罩层弹出半透明状态的dialog
2014/03/04 Javascript
点击标签切换和自动切换DIV选项卡
2014/08/10 Javascript
JS小游戏之象棋暗棋源码详解
2014/09/25 Javascript
javascript实现动态加载CSS
2015/01/26 Javascript
2种jQuery 实现刮刮卡效果
2015/02/01 Javascript
JS弹出可拖拽可关闭的div层完整实例
2015/02/13 Javascript
jQuery选择器源码解读(四):tokenize方法的Expr.preFilter
2015/03/31 Javascript
使用PHP+JavaScript将HTML页面转换为图片的实例分享
2016/04/18 Javascript
AngularJS 简单应用实例
2016/07/28 Javascript
AngularJS 中的Promise --- $q服务详解
2016/09/14 Javascript
将json转换成struts参数的方法
2016/11/08 Javascript
javaScript中封装的各种写法示例(推荐)
2017/07/03 Javascript
微信小程序如何获取用户手机号
2018/01/26 Javascript
jquery应用实例分享_实现手风琴特效
2018/02/01 jQuery
jQuery实现的导航条点击后高亮显示功能示例
2019/03/04 jQuery
JS实现导航栏楼层特效
2020/01/01 Javascript
详解Python中的循环语句的用法
2015/04/09 Python
unittest+coverage单元测试代码覆盖操作实例详解
2018/04/04 Python
Python实现的求解最大公约数算法示例
2018/05/03 Python
python 顺时针打印矩阵的超简洁代码
2018/11/14 Python
在django-xadmin中APScheduler的启动初始化实例
2019/11/15 Python
解决pycharm 安装numpy失败的问题
2019/12/05 Python
台湾SHOPRO购物行家:亚洲首创影视.3C.家电.优质购物平台
2018/05/07 全球购物
Python如何实现单例模式
2016/06/03 面试题
年会活动策划方案
2014/01/23 职场文书
集中采购方案
2014/06/10 职场文书
大学军训自我鉴定大全
2014/09/18 职场文书
亮剑精神观后感
2015/06/05 职场文书
nginx配置文件使用环境变量的操作方法
2021/06/02 Servers
vue里使用create, mounted调用方法
2022/04/26 Vue.js
Python开发五子棋小游戏
2022/04/28 Python