详解利用django中间件django.middleware.csrf.CsrfViewMiddleware防止csrf攻击


Posted in Python onOctober 09, 2018

一、在django后台处理

1、将django的setting中的加入django.contrib.messages.middleware.MessageMiddleware,一般新建的django项目中会自带的。

MIDDLEWARE_CLASSES = [
  'django.middleware.security.SecurityMiddleware',
  'django.contrib.sessions.middleware.SessionMiddleware',
  'django.middleware.common.CommonMiddleware',
  'django.middleware.csrf.CsrfViewMiddleware',
  'django.contrib.auth.middleware.AuthenticationMiddleware',
  'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
  'django.contrib.messages.middleware.MessageMiddleware', 
]

2、在templete的html页的from中添加{% csrf %},后台重定向语法如下:

return render_to_response(xxx.html', context_instance=RequestContext(request))

二、前端处理

对所有的ajax请求加上以下语句:

$(function () {
  $.ajaxSetup({
    data: {csrfmiddlewaretoken: '{{ csrf_token }}'},
  });
})

这样向后台的请求都会带django生成的那个csrf_token值。中间件csrf模块会截取判断csrf_token值是否一致,如果一致则请求合法。

三、对于ajax的复杂对象,例如[{"id":"001","name":"小明"},{"id":"002","name":"小军"}].,后台post的处理

必须将这种对象转化为json格式传到后台,后台在反序列化即可。(不要用ajax的其他序列化格式,其深度序列化后,django后台解析比较困难)

contentType不需要指定utf-8,否则post解析出错

四、csrf攻击与预防

csrf利用session和cookie的时效性进行攻击。他会获取请求的cookie,在session时效内进行请求。因此对于重要信息,重要功能进行单次请求处理。即请求一次失效。

例如:请求头中加入验证token信息,用完即失效。django的中间件csrf_token就是此原理防止的。

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

Python 相关文章推荐
Python中多线程及程序锁浅析
Jan 21 Python
在Python中处理字符串之isdigit()方法的使用
May 18 Python
Python代码实现KNN算法
Dec 20 Python
Python设计模式之备忘录模式原理与用法详解
Jan 15 Python
python自制包并用pip免提交到pypi仅安装到本机【推荐】
Jun 03 Python
用python wxpy管理微信公众号并利用微信获取自己的开源数据
Jul 30 Python
使用Python串口实时显示数据并绘图的例子
Dec 26 Python
Python抓新型冠状病毒肺炎疫情数据并绘制全国疫情分布的代码实例
Feb 05 Python
Python基础之字符串常见操作经典实例详解
Feb 26 Python
浅析Python 多行匹配模式
Jul 24 Python
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
Feb 22 Python
详解OpenCV曝光融合
Apr 29 Python
详解如何将python3.6软件的py文件打包成exe程序
Oct 09 #Python
让代码变得更易维护的7个Python库
Oct 09 #Python
windows下cx_Freeze生成Python可执行程序的详细步骤
Oct 09 #Python
Python打包方法Pyinstaller的使用
Oct 09 #Python
Python如何发布程序的详细教程
Oct 09 #Python
python如何发布自已pip项目的方法步骤
Oct 09 #Python
Django csrf 验证问题的实现
Oct 09 #Python
You might like
详解php的魔术方法__get()和__set()使用介绍
2012/09/19 PHP
php制作unicode解码工具(unicode编码转换器)代码分享
2013/12/24 PHP
php+mysql实现无限分类实例详解
2015/01/15 PHP
实现WordPress主题侧边栏切换功能的PHP脚本详解
2015/12/14 PHP
JavaScript中的闭包原理分析
2010/03/08 Javascript
JQuery浮动DIV提示信息并自动隐藏的代码
2010/08/29 Javascript
打造基于jQuery的高性能TreeView(asp.net)
2011/02/23 Javascript
javascript中的toFixed固定小数位数 简单实例分享
2013/07/12 Javascript
在HTML代码中使用JavaScript代码的例子
2014/10/16 Javascript
Javascript中拼接大量字符串的方法
2015/02/05 Javascript
jQuery寻找n以内完全数的方法
2015/06/24 Javascript
JavaScript兼容浏览器FF/IE技巧
2016/08/14 Javascript
js实现增加数字显示的环形进度条效果
2017/02/05 Javascript
浅谈gulp创建完整的项目流程
2017/12/20 Javascript
AngularJS使用ui-route实现多层嵌套路由的示例
2018/01/10 Javascript
利用Angular7开发一个Radio组件的全过程
2019/07/11 Javascript
VUE : vue-cli中去掉路由中的井号#操作
2020/09/04 Javascript
讲解Python中运算符使用时的优先级
2015/05/14 Python
python使用xmlrpclib模块实现对百度google的ping功能
2015/06/02 Python
python 爬取微信文章
2016/01/30 Python
pandas数据处理基础之筛选指定行或者指定列的数据
2018/05/03 Python
Python3实现二叉树的最大深度
2019/09/30 Python
浅析python,PyCharm,Anaconda三者之间的关系
2019/11/27 Python
python操作docx写入内容,并控制文本的字体颜色
2020/02/13 Python
使用Keras实现简单线性回归模型操作
2020/06/12 Python
python实现人性化显示金额数字实例详解
2020/09/25 Python
使用HTML5的File实现base64和图片的互转
2013/08/01 HTML / CSS
老教师工作总结的自我评价
2013/09/27 职场文书
精彩的大学生自我评价
2013/11/17 职场文书
上班迟到检讨书
2014/01/10 职场文书
电脑专业个人求职信范文
2014/02/04 职场文书
主管会计岗位责任制
2014/02/10 职场文书
十八大演讲稿
2014/05/22 职场文书
计算机系本科生求职信
2014/05/31 职场文书
2015元旦家电促销活动策划方案
2014/12/09 职场文书
工作会议简报
2015/07/20 职场文书