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解释器相关安装方法
Oct 12 Python
python面向对象_详谈类的继承与方法的重载
Jun 07 Python
python数据类型判断type与isinstance的区别实例解析
Oct 31 Python
numpy找出array中的最大值,最小值实例
Apr 03 Python
python 除法保留两位小数点的方法
Jul 16 Python
Python 使用多属性来进行排序
Sep 01 Python
Python原始套接字编程实例解析
Jan 29 Python
python中tkinter窗口位置\坐标\大小等实现示例
Jul 09 Python
Django实现在线无水印抖音视频下载(附源码及地址)
May 06 Python
pytorch损失反向传播后梯度为none的问题
May 12 Python
这样写python注释让代码更加的优雅
Jun 02 Python
python函数的两种嵌套方法使用
Apr 02 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
双料怀旧--SHARP GF515的维护、修理和简单调试
2021/03/02 无线电
用IE远程创建Mysql数据库的简易程序
2006/10/09 PHP
php 数学运算验证码实现代码
2009/10/11 PHP
php关键字仅替换一次的实现函数
2015/10/29 PHP
PHP迭代与递归实现无限级分类
2017/08/28 PHP
Firefox getBoxObjectFor getBoundingClientRect联系
2008/10/26 Javascript
jQuery中append、insertBefore、after与insertAfter的简单用法与注意事项
2020/04/04 Javascript
javascript面向对象程序设计(一)
2015/01/29 Javascript
详解AngularJS中的依赖注入机制
2015/06/17 Javascript
jQuery中设置form表单中action值的实现方法
2016/05/25 Javascript
简单的vue-resourse获取json并应用到模板示例
2017/02/10 Javascript
js实现股票实时刷新数据案例
2017/05/14 Javascript
JS图片预加载插件详解
2017/06/21 Javascript
JavaScript简易计算器制作
2020/01/17 Javascript
详解如何使用React Hooks请求数据并渲染
2020/10/18 Javascript
在vue项目中引用Antv G2,以饼图为例讲解
2020/10/28 Javascript
[01:42]DOTA2 – 虚无之灵
2019/08/25 DOTA
使用graphics.py实现2048小游戏
2015/03/10 Python
Django Admin 实现外键过滤的方法
2017/09/29 Python
解决Tensorboard可视化错误:不显示数据 No scalar data was found
2020/02/15 Python
python实现ping命令小程序
2020/12/28 Python
纯CSS3代码实现switch滑动开关按钮效果
2016/08/30 HTML / CSS
JavaScript+Canvas实现自定义画板的示例代码
2019/05/13 HTML / CSS
美国领先的奢侈美容零售商:Bluemercury
2017/07/26 全球购物
设计总监岗位职责
2013/12/07 职场文书
大学生实习感言
2014/01/16 职场文书
幼儿园中班下学期评语
2014/04/18 职场文书
产品开发计划书
2014/04/27 职场文书
天地会口号
2014/06/17 职场文书
中学生国庆节演讲稿2015
2015/07/30 职场文书
谢师宴家长答谢词
2015/09/30 职场文书
php去除数组中为0的元素的实例分析
2021/11/17 PHP
把77A收信机改造成收音机
2022/04/05 无线电
零基础学java之循环语句的使用
2022/04/10 Java/Android
2022微信温控新功能上线
2022/05/09 数码科技
SQL Server中的逻辑函数介绍
2022/05/25 SQL Server