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用户的方法
Nov 15 Python
python正则表达式match和search用法实例
Mar 26 Python
Python实现PS图像调整黑白效果示例
Jan 25 Python
Pycharm无法显示动态图片的解决方法
Oct 28 Python
Python玩转加密的技巧【推荐】
May 13 Python
使用Python实现文字转语音并生成wav文件的例子
Aug 08 Python
PyTorch中topk函数的用法详解
Jan 02 Python
django数据模型中null和blank的区别说明
Sep 02 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
Sep 30 Python
Pycharm创建python文件自动添加日期作者等信息(步骤详解)
Feb 03 Python
Python学习开发之图形用户界面详解
Aug 23 Python
Python中的 enumerate和zip详情
May 30 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
将博客园(cnblogs.com)数据导入到wordpress的代码
2013/01/06 PHP
php 模拟post_验证页面的返回状态(实例讲解)
2013/10/28 PHP
php中使用gd库实现下载网页中所有图片
2015/05/12 PHP
php+ajax制作无刷新留言板
2015/10/27 PHP
PHP二分查找算法示例【递归与非递归方法】
2016/09/29 PHP
thinkPHP模板中for循环与switch语句用法示例
2016/11/30 PHP
js 第二代身份证号码的验证机制代码
2011/05/12 Javascript
js仿百度贴吧验证码特效实例代码
2014/01/16 Javascript
jquery隔行换色效果实现方法
2015/01/15 Javascript
jquery.gridrotator实现响应式图片展示画廊效果
2015/06/23 Javascript
对JavaScript客户端应用编程的一些建议
2015/06/24 Javascript
js实现的全国省市二级联动下拉选择菜单完整实例
2015/08/17 Javascript
JS中数组重排序方法
2016/11/11 Javascript
JS动态生成年份和月份实例代码
2017/02/04 Javascript
详解Webpack实战之构建 Electron 应用
2017/12/25 Javascript
微信小程序实现tab左右切换效果
2020/11/15 Javascript
vue2过滤器模糊查询方法
2018/09/16 Javascript
微信小程序实现两个页面传值的方法分析
2018/12/11 Javascript
fastadmin中调用js的方法
2019/05/14 Javascript
vue filter 完美时间日期格式的代码
2019/08/14 Javascript
js实现div色块拖动录制
2020/01/16 Javascript
[01:33]一分钟玩转DOTA2第三弹:DOTA2&DotA快捷操作大对比
2014/06/04 DOTA
解析Python中的变量、引用、拷贝和作用域的问题
2015/04/07 Python
python使用opencv驱动摄像头的方法
2018/08/03 Python
利用python实现短信和电话提醒功能的例子
2019/08/08 Python
Python2比较当前图片跟图库哪个图片相似的方法示例
2019/09/28 Python
Django中Q查询及Q()对象 F查询及F()对象用法
2020/07/09 Python
Python爬虫之Selenium下拉框处理的实现
2020/12/04 Python
python脚本定时发送邮件
2020/12/22 Python
总结30个CSS3选择器
2017/04/13 HTML / CSS
全球最大运动品牌的男装、女装和童装官方库存商:A&A Sports
2021/01/17 全球购物
艺术系应届生的自我评价
2013/10/19 职场文书
离婚财产处理协议书
2014/09/30 职场文书
学校开学标语
2014/10/06 职场文书
Python线程池与GIL全局锁实现抽奖小案例
2022/04/13 Python
Android实现获取短信验证码并自动填充
2023/05/21 Java/Android