详解利用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 mysqldb连接数据库
Mar 16 Python
Python处理JSON时的值报错及编码报错的两则解决实录
Jun 26 Python
Django使用httpresponse返回用户头像实例代码
Jan 26 Python
Python迭代器与生成器基本用法分析
Jul 26 Python
Python中psutil的介绍与用法
May 02 Python
详解Python3 对象组合zip()和回退方式*zip
May 15 Python
python实现批量修改服务器密码的方法
Aug 13 Python
详解python中docx库的安装过程
Nov 08 Python
50行Python代码实现视频中物体颜色识别和跟踪(必须以红色为例)
Nov 20 Python
详解有关PyCharm安装库失败的问题的解决方法
Feb 02 Python
PyQt5实现登录页面
May 30 Python
python 图像增强算法实现详解
Jan 24 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
重置版游戏视频
2020/04/09 魔兽争霸
PHP高自定义性安全验证码代码
2011/11/27 PHP
PHP删除二维数组中相同元素及数组重复值的方法示例
2017/05/05 PHP
PHP排序算法之归并排序(Merging Sort)实例详解
2018/04/21 PHP
PHP实现的AES双向加密解密功能示例【128位】
2018/09/03 PHP
使用javascript访问XML数据的实例
2006/12/27 Javascript
用Javscript实现表单复选框的全选功能
2007/05/25 Javascript
SyntaxHighlighter语法高亮插件使用说明
2011/08/14 Javascript
使用PHP+JQuery+Ajax分页的实现
2013/04/23 Javascript
按Enter键触发事件的jquery方法实现代码
2014/02/17 Javascript
ajax提交表单实现网页无刷新注册示例
2014/05/08 Javascript
js实现非常简单的焦点图切换特效实例
2015/05/07 Javascript
JS检测移动端横竖屏的代码
2016/05/30 Javascript
Bootstrap分页插件之Bootstrap Paginator实例详解
2016/10/15 Javascript
关于Function中的bind()示例详解
2016/12/02 Javascript
微信小程序用户自定义模版用法实例分析
2017/11/28 Javascript
返回上一个url并刷新界面的js代码
2020/09/12 Javascript
使用Django和Python创建Json response的方法
2018/03/26 Python
Python可变参数*args和**kwargs用法实例小结
2018/04/27 Python
Pandas时间序列:重采样及频率转换方式
2019/12/26 Python
PyCharm汉化安装及永久激活详细教程(靠谱)
2020/01/16 Python
Python HTMLTestRunner测试报告view按钮失效解决方案
2020/05/25 Python
Python装饰器如何实现修复过程解析
2020/09/05 Python
CSS3的Border-radius轻松制作圆角
2012/12/24 HTML / CSS
BIBLOO捷克:购买女装、男装、童装、鞋和配件
2017/01/27 全球购物
伦敦最受欢迎的蛋糕店:Konditor & Cook
2019/11/01 全球购物
六道php面试题附答案
2014/06/05 面试题
教师申诉制度
2014/01/29 职场文书
高中毕业自我评价
2014/02/08 职场文书
《小猪家的桃花树》教学反思
2014/04/11 职场文书
交通志愿者活动总结
2014/06/27 职场文书
创优争先心得体会
2014/09/11 职场文书
小学大队委竞选口号
2015/12/25 职场文书
如何使用Python实现一个简易的ORM模型
2021/05/12 Python
如何解决php-fpm启动不了问题
2021/11/17 PHP
Python超详细分步解析随机漫步
2022/03/17 Python