python Django里CSRF 对应策略详解


Posted in Python onAugust 05, 2019

CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的×××方式。

我的理解是,比如你访问过招商银行的网站并登陆之后,你的cookie信息暂时不会失效,

这时,hacker通过各种方式诱导你访问他给你提供的网站等链接,让你在同一浏览器访问

hacker给你的网站时,那么他给你提供的网站里面有直接有向招商银行提交转账信息的请求,这时,

这个转账请求会借用你刚刚登陆过招商银行的cookie信息,来使用的你的身份进行合法的转账。

那么为了减少这个情况的发生,在客户端与服务端交互的时候,当客户端浏览器第一次访问cookie的时候,服务端会有基于csrf的随机验证字符串生成,然后把这些字符串写到客户端cookie里,同时服务端在session里保存一份,当客户端浏览器再次发来post请求的时候,服务端会验证cookie里csrf_token(就是生成的这个随机字符串)。

Django里自动帮我们封装了这个功能,在Django项目里的setting.py文件里会默认开启 'django.middleware.csrf.CsrfViewMiddleware',这一项功能。

所以我们html文件里有post请求的时候要在from表单里添加{% csrf_token %}这一项

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
  <div>
    <form action="/app01/login/" method="post">
 {% csrf_token %}
      <input type="text" name="username">
      <input type="password" name="pwd">
      <input type="submit" value="提交">
    </form>
  </div>
</body>
</html>

但是有的时候是不需要 csrf_token 认证的,有的时候是需要的,但是Django项目里的setting.py文件里设置了 'django.middleware.csrf.CsrfViewMiddleware'之后就是全局生效了;这就 不是我们所需要的了。

那么如果有的函数不需要csrf_token 认证的话,那么就需要用到@csrf_exempt装饰器来设置单个函数不用csrf_token 认证

from django.views.decorators.csrf import csrf_exempt,csrf_protect

@csrf_exempt是不需要设置csrf_token认证的

@csrf_protect是 需要设置csrf_token 认证的

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现的数据结构与算法之快速排序详解
Apr 22 Python
Python 安装setuptools和pip工具操作方法(必看)
May 22 Python
深入理解Python 关于supper 的 用法和原理
Feb 28 Python
python之DataFrame实现excel合并单元格
Feb 22 Python
对python 操作solr索引数据的实例详解
Dec 07 Python
运用Python的webbrowser实现定时打开特定网页
Feb 21 Python
Python实现通过解析域名获取ip地址的方法分析
May 17 Python
python gensim使用word2vec词向量处理中文语料的方法
Jul 05 Python
python基于celery实现异步任务周期任务定时任务
Dec 30 Python
matplotlib bar()实现百分比堆积柱状图
Feb 24 Python
python 爬取天气网卫星图片
Jun 07 Python
Python PIL按比例裁剪图片
May 11 Python
用Python徒手撸一个股票回测框架搭建【推荐】
Aug 05 #Python
详解Python打包分发工具setuptools
Aug 05 #Python
Django 1.10以上版本 url 配置注意事项详解
Aug 05 #Python
TensorFlow车牌识别完整版代码(含车牌数据集)
Aug 05 #Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
Aug 05 #Python
Django应用程序入口WSGIHandler源码解析
Aug 05 #Python
详解如何用TensorFlow训练和识别/分类自定义图片
Aug 05 #Python
You might like
javascript 小型动画组件与实现代码
2010/06/02 PHP
分享一个PHP数据流应用的简单例子
2012/06/01 PHP
php导出生成word的方法
2015/12/25 PHP
PHP批量删除jQuery操作
2017/07/23 PHP
总结PHP内存释放以及垃圾回收
2018/03/29 PHP
input、button的不同type值在ajax提交表单时导致的陷阱
2009/02/24 Javascript
为调试JavaScript添加输出窗口的代码
2010/02/07 Javascript
jquery 页眉单行信息滚动显示实现思路及代码
2014/06/26 Javascript
jquery操作对象数组元素方法详解
2014/11/26 Javascript
javascript实现简单的分页特效
2015/08/12 Javascript
VUE页面中加载外部HTML的示例代码
2017/09/20 Javascript
从零开始搭建一个react项目开发
2018/02/09 Javascript
vue全局组件与局部组件使用方法详解
2018/03/29 Javascript
微信小程序使用wxParse解析html的方法教程
2018/07/06 Javascript
微信小程序结合mock.js实现后台模拟及调试
2019/03/28 Javascript
TypeScript中使用getElementXXX()的示例代码
2019/09/12 Javascript
解决layui页面按钮点击无反应,也不报错的问题
2019/09/29 Javascript
如何构建一个Vue插件并生成npm包
2020/10/26 Javascript
Nuxt 项目性能优化调研分析
2020/11/07 Javascript
原生微信小程序开发中 redux 的使用详解
2021/02/18 Javascript
[01:29:46]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第二局
2016/02/27 DOTA
[48:48]VGJ.T vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python迭代器和生成器介绍
2015/03/06 Python
解决python3 requests headers参数不能有中文的问题
2019/08/21 Python
Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
2019/08/28 Python
tensorflow 利用expand_dims和squeeze扩展和压缩tensor维度方式
2020/02/07 Python
TensorFlow2.0矩阵与向量的加减乘实例
2020/02/07 Python
TensorFlow的reshape操作 tf.reshape的实现
2020/04/19 Python
Python如何使用正则表达式爬取京东商品信息
2020/06/01 Python
使用CSS3编写类似iOS中的复选框及带开关的按钮
2016/04/11 HTML / CSS
校运会入场式解说词
2014/02/10 职场文书
爱心捐款倡议书范文
2014/05/12 职场文书
中文专业毕业生自荐信
2014/05/24 职场文书
大学英语专业求职信
2014/06/21 职场文书
小学生运动会通讯稿
2014/09/23 职场文书
Java版 单机五子棋
2022/05/04 Java/Android