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登录pop3邮件服务器接收邮件的方法
Apr 30 Python
使用FastCGI部署Python的Django应用的教程
Jul 22 Python
Python实现将文本生成二维码的方法示例
Jul 18 Python
详解Python import方法引入模块的实例
Aug 02 Python
解决python测试opencv时imread导致的错误问题
Jan 26 Python
python ChainMap的使用和说明详解
Jun 11 Python
python提取照片坐标信息的实例代码
Aug 14 Python
利用python实现周期财务统计可视化
Aug 25 Python
Pycharm plot独立窗口显示的操作
Dec 11 Python
python字典按照value排序方法
Dec 28 Python
Python用Jira库来操作Jira
Dec 28 Python
Python 如何安装Selenium
May 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
VML绘图板②脚本--VMLgraph.js、XMLtool.js
2006/10/09 PHP
php pki加密技术(openssl)详解
2013/07/01 PHP
PHP5中GD库生成图形验证码(有汉字)
2013/07/28 PHP
jQuery中的height innerHeight outerHeight区别示例介绍
2014/06/15 Javascript
让JavaScript和其它资源并发下载的方法
2014/10/16 Javascript
Vue+SpringBoot开发V部落博客管理平台
2017/12/27 Javascript
浅析js中mvvm模式实现的原理
2018/10/06 Javascript
Vue 全家桶实现移动端酷狗音乐功能
2018/11/16 Javascript
jQuery实现简单的Ajax调用功能示例
2019/02/15 jQuery
Vue开发之watch监听数组、对象、变量操作分析
2019/04/25 Javascript
Flutter实现仿微信底部菜单栏功能
2019/09/18 Javascript
ElementUI之Message功能拓展详解
2019/10/18 Javascript
[32:47]完美世界DOTA2联赛 GXR vs IO 第二场 11.07
2020/11/09 DOTA
学习python之编写简单乘法口诀表实现代码
2016/02/27 Python
Python 专题六 局部变量、全局变量global、导入模块变量
2017/03/20 Python
Windows平台Python连接sqlite3数据库的方法分析
2017/07/12 Python
Python日期的加减等操作的示例
2017/08/15 Python
Python实现针对含中文字符串的截取功能示例
2017/09/22 Python
python实现微信接口(itchat)详细介绍
2017/10/23 Python
Python实现SQL注入检测插件实例代码
2019/02/02 Python
Python实现的序列化和反序列化二叉树算法示例
2019/03/02 Python
python字符串下标与切片及使用方法
2020/02/13 Python
详解Django配置JWT认证方式
2020/05/09 Python
python文件排序的方法总结
2020/09/13 Python
利用python批量爬取百度任意类别的图片的实现方法
2020/10/07 Python
python线程优先级队列知识点总结
2021/02/28 Python
用HTML5.0制作网页的教程
2010/05/30 HTML / CSS
input元素的url类型和email类型简介
2012/07/11 HTML / CSS
微软中国官方旗舰店:销售Surface、Xbox One、笔记本电脑、Office
2018/07/23 全球购物
Tiqets英国:智能手机上的文化和娱乐门票
2019/07/10 全球购物
美国在线医疗分销商:MedEx Supply
2020/02/04 全球购物
给校长的建议书600字
2014/05/15 职场文书
医院保洁服务方案
2014/06/11 职场文书
国际商务英语专业求职信
2014/07/08 职场文书
胡雪岩故居导游词
2015/02/06 职场文书
golang操作redis的客户端包有多个比如redigo、go-redis
2022/04/14 Golang