详解利用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 字典(Dictionary)操作详解
Mar 11 Python
深入理解python中的浅拷贝和深拷贝
May 30 Python
python3+pyqt5+itchat微信定时发送消息的方法
Feb 20 Python
Python Image模块基本图像处理操作小结
Apr 13 Python
python conda操作方法
Sep 11 Python
pyinstaller 3.6版本通过pip安装失败的解决办法(推荐)
Jan 18 Python
tensorflow之tf.record实现存浮点数数组
Feb 17 Python
python 递归调用返回None的问题及解决方法
Mar 16 Python
Python实现石头剪刀布游戏
Jan 20 Python
Python爬虫进阶之Beautiful Soup库详解
Apr 29 Python
浅谈pytorch中stack和cat的及to_tensor的坑
May 20 Python
使用Python获取字典键对应值的方法
Apr 26 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汉字转换拼音的类
2013/06/18 PHP
PHP实现合并discuz用户
2015/08/05 PHP
php抓取并保存网站图片的实现代码
2015/10/28 PHP
使用laravel和ajax实现整个页面无刷新的操作方法
2019/10/03 PHP
推荐:极酷右键菜单
2006/11/29 Javascript
js Form.elements[i]的使用实例
2011/11/13 Javascript
解析js原生方法创建表格效率测试
2013/07/08 Javascript
jquery 延迟执行实例介绍
2013/08/20 Javascript
javascript中expression的用法整理
2014/05/13 Javascript
jquery图片滚动放大代码分享(2)
2015/08/28 Javascript
JS实现的自定义网页拖动类
2015/11/06 Javascript
详解JavaScript的回调函数
2015/11/20 Javascript
AngularJs  unit-testing(单元测试)详解
2016/09/02 Javascript
浅谈jQuery效果函数
2016/09/16 Javascript
jquery.Jcrop结合JAVA后台实现图片裁剪上传实例
2016/11/05 Javascript
根据Bootstrap Paginator改写的js分页插件
2016/12/25 Javascript
JS正则表达式学习之贪婪和非贪婪模式实例总结
2016/12/26 Javascript
Node+Express+MongoDB实现登录注册功能实例
2017/04/23 Javascript
基于wordpress的ajax写法详解
2018/01/02 Javascript
深入理解Node module模块
2018/03/26 Javascript
纯JS实现的读取excel文件内容功能示例【支持所有浏览器】
2018/06/23 Javascript
angularJs中跳转到指定的锚点实例($anchorScroll)
2018/08/31 Javascript
微信小程序wx:for循环的实例详解
2018/10/07 Javascript
Vue中this.$nextTick的作用及用法
2020/02/04 Javascript
js删除对象中的某一个字段的方法实现
2021/01/11 Javascript
举例讲解Python中的死锁、可重入锁和互斥锁
2015/11/05 Python
Python的Asyncore异步Socket模块及实现端口转发的例子
2016/06/14 Python
PyQt5每天必学之创建窗口居中效果
2018/04/19 Python
python 编写简单网页服务器的实例
2018/06/01 Python
Python全排列操作实例分析
2018/07/24 Python
Django xadmin开启搜索功能的实现
2019/11/15 Python
pytorch实现mnist分类的示例讲解
2020/01/10 Python
python使用Thread的setDaemon启动后台线程教程
2020/04/25 Python
网络通讯中,端口有什么含义,端口的取值范围
2012/11/23 面试题
艺术设计专业个人求职信范文
2013/12/11 职场文书
教师四风问题整改措施
2014/09/25 职场文书