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基础教程之对象和类的实际运用
Aug 29 Python
python中的reduce内建函数使用方法指南
Aug 31 Python
python实现的文件夹清理程序分享
Nov 22 Python
PyQt5利用QPainter绘制各种图形的实例
Oct 19 Python
Python 运行.py文件和交互式运行代码的区别详解
Jul 02 Python
Python实现word2Vec model过程解析
Dec 16 Python
pytorch进行上采样的种类实例
Feb 18 Python
Python轻量级web框架bottle使用方法解析
Jun 13 Python
pycharm如何设置官方中文(如何汉化)
Dec 29 Python
Python爬取网站图片并保存的实现示例
Feb 26 Python
如何正确理解python装饰器
Jun 15 Python
python字符串的一些常见实用操作
Apr 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
joomla内置的表单验证功能使用方法
2010/06/11 PHP
php中常用的预定义变量小结
2012/05/09 PHP
php mb_substr()函数截取中文字符串应用示例
2014/07/29 PHP
PHP return语句另类用法不止是在函数中
2014/09/17 PHP
thinkphp浏览历史功能实现方法
2014/10/29 PHP
php中 ob_start等函数截取标准输出的方法
2015/06/22 PHP
PHP中使用curl入门教程
2015/07/02 PHP
javascript cookie解码函数(兼容ff)
2008/03/17 Javascript
论坛里点击别人帖子下面的回复,回复标题变成“回复 24# 的帖子”
2009/06/14 Javascript
网页中CDATA标记的说明
2010/09/12 Javascript
Bootstrap学习系列之使用 Bootstrap Typeahead 组件实现百度下拉效果
2016/07/07 Javascript
jQuery中show与hide方法用法示例
2016/09/16 Javascript
Vue2.0利用 v-model 实现组件props双向绑定的优美解决方案
2017/03/13 Javascript
JS开发中百度地图+城市联动实现实时触发查询地址功能
2017/04/13 Javascript
使用Nodejs连接mongodb数据库的实现代码
2017/08/21 NodeJs
jQuery实现每日秒杀商品倒计时功能
2019/09/06 jQuery
Element Input输入框的使用方法
2020/07/26 Javascript
react-intl实现React国际化多语言的方法
2020/09/27 Javascript
Python中逗号的三种作用实例分析
2015/06/08 Python
基于hashlib模块--加密(详解)
2017/06/21 Python
详解Django 时间与时区设置问题
2019/07/23 Python
Django如何实现上传图片功能
2019/08/16 Python
tensorflow求导和梯度计算实例
2020/01/23 Python
python 回溯法模板详解
2020/02/26 Python
python中os.remove()用法及注意事项
2021/01/31 Python
利用CSS3的transition属性实现滑动效果
2015/08/05 HTML / CSS
加拿大著名时装品牌:SOIA & KYO
2016/08/23 全球购物
草莓网化妆品日本站:Strawberrynet日本
2017/10/20 全球购物
Nordgreen手表德国官方网站:丹麦极简主义手表
2019/10/31 全球购物
Linux面试题LINUX系统类
2015/11/25 面试题
大学校园毕业自我鉴定
2014/01/15 职场文书
放飞中国梦演讲稿
2014/04/23 职场文书
2013年最新自荐信范文
2014/06/23 职场文书
目标责任书格式
2014/07/28 职场文书
详解nginx进程锁的实现
2021/06/14 Servers
纯CSS实现一个简单步骤条的示例代码
2022/07/15 HTML / CSS