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中实现单例模式的三种方法
Apr 08 Python
在Python程序中操作文件之flush()方法的使用教程
May 24 Python
Python学习教程之常用的内置函数大全
Jul 14 Python
python使用opencv按一定间隔截取视频帧
Mar 06 Python
python使用folium库绘制地图点击框
Sep 21 Python
使用urllib库的urlretrieve()方法下载网络文件到本地的方法
Dec 19 Python
Python使用Slider组件实现调整曲线参数功能示例
Sep 06 Python
PyTorch里面的torch.nn.Parameter()详解
Jan 03 Python
python 项目目录结构设置
Feb 14 Python
python对数组进行排序,并输出排序后对应的索引值方式
Feb 28 Python
Python爬取用户观影数据并分析用户与电影之间的隐藏信息!
Jun 29 Python
python数字图像处理:图像的绘制
Jun 28 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中for循环语句的几种变型
2007/03/16 PHP
浅析PHP递归函数返回值使用方法
2013/02/18 PHP
PHP实现将MySQL重复ID二维数组重组为三维数组的方法
2016/08/01 PHP
javascript中的注释使用与注意事项小结
2011/09/20 Javascript
js用闭包遍历树状数组的方法
2014/03/19 Javascript
DOM基础教程之事件对象
2015/01/20 Javascript
IE及IE6浏览器中判断JS文件加载成功失败的方法
2015/02/18 Javascript
javascript中scrollTop详解
2015/04/13 Javascript
深入学习 JavaScript中的函数调用
2017/03/23 Javascript
微信小程序 蓝牙的实现实例代码
2017/06/27 Javascript
checkbox:click事件触发span元素内容改变的方法
2017/09/11 Javascript
给vue项目添加ESLint的详细步骤
2017/09/29 Javascript
使用nodeJs来安装less及编译less文件为css文件的方法
2017/11/20 NodeJs
Vue 中mixin 的用法详解
2018/04/23 Javascript
浅谈vue同一页面中拥有两个表单时,的验证问题
2018/09/18 Javascript
vue使用v-for实现hover点击效果
2018/09/29 Javascript
微信小程序实现带参数的分享功能(两种方法)
2019/05/17 Javascript
Vue extend的基本用法(实例详解)
2019/12/09 Javascript
详解Python中列表和元祖的使用方法
2015/04/25 Python
如何使用Python的Requests包实现模拟登陆
2018/04/27 Python
Python数据类型之String字符串实例详解
2019/05/08 Python
Pandas之DataFrame对象的列和索引之间的转化
2019/06/25 Python
PyQt5实现暗黑风格的计时器
2019/07/29 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
2020/09/03 Python
深入探究HTML5的History API
2015/07/09 HTML / CSS
全球领先美式家具品牌:Ashley爱室丽家居
2017/08/07 全球购物
南京某公司笔试题
2013/01/27 面试题
生产部管理制度
2014/01/31 职场文书
职业女性的职业规划
2014/03/04 职场文书
人事任命书格式
2014/06/05 职场文书
相亲大会策划方案
2014/06/05 职场文书
初中生活随笔
2015/08/15 职场文书
Python读取文件夹下的所有文件实例代码
2021/04/02 Python
Html5同时支持多端sdk的小技巧
2021/11/17 HTML / CSS
Win11 引入 Windows 365 云操作系统,适应疫情期间混合办公模式:启动时直接登录、模
2022/04/06 数码科技
SpringBoot详解执行过程
2022/07/15 Java/Android