vue与django中预防CSRF

一、环境:

vue2.0、django 1.10.x、iview

二、django后台处理

1、将django的setting的MIDDLEWARE中加入django.middleware.csrf.CsrfViewMiddleware,一般新建的django项目中会自带的。

1 MIDDLEWARE = [
2     ‘django.middleware.security.SecurityMiddleware‘,
3     ‘django.contrib.sessions.middleware.SessionMiddleware‘,
4     ‘django.middleware.common.CommonMiddleware‘,
5     ‘django.middleware.csrf.CsrfViewMiddleware‘,
6     ‘django.contrib.auth.middleware.AuthenticationMiddleware‘,
7     ‘django.contrib.messages.middleware.MessageMiddleware‘,
8     ‘django.middleware.clickjacking.XFrameOptionsMiddleware‘,
9 ]

2、在templete的html页的from(iview的<i-form></i-form> 标签)中添加{% csrf %},后台渲染语法如下:

render(request,‘xxxx.html‘)

二、前端处理

修改axios 请求设置为:这里取当前cookie中的值,赋值在请求头的‘X-CSRFToken‘变量中
 axios.interceptors.request.use((config) => {
            config.headers[‘X-Requested-With‘] = ‘XMLHttpRequest‘;
            let regex = /.*csrftoken=([^;.]*).*$/;
            config.headers[‘X-CSRFToken‘] = document.cookie.match(regex) === null ? null : document.cookie.match(regex)[1];
            return config
        });

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

三、ivew表单效验注意事项

由于使用的是vue2.0 版本,此时绑定的写法有变动。

<i-form ref="formValidate" :model="formValidate" :rules="ruleValidate"  :label-width="80">
                {% csrf_token %}
       <Form-item label="验证码:" prop="uidcode">
              <i-input v-model="formValidate.uidcode" laceholder="请输入验证码" style="width:80%"></i-input>
       </Form-item>
</i-form>    
 new Vue({
            el: "#temp",
            data() {
                return {
                    formValidate: {
                        uidcode: ‘‘,
                    },
                    ruleValidate: {
                        uidcode: [
                                 { required: true, message: ‘不能为空!‘, trigger: ‘blur‘ }
                        ]
                    }
                }
            },
            methods: {
                handleSubmit (name) {
                    this.$refs[name].validate((valid) => {
                        if (valid) {
                                //do something
                        }
                    })
                },
                handleReset (name) {
                    this.$refs[name].resetFields();
                }
            },
        })
        

关于django中更多的CSRF问题,详见 利用django中间件CsrfViewMiddleware防止csrf攻击

原文地址:https://www.cnblogs.com/lovenethui/p/10362934.html

时间: 2024-08-02 08:23:02

vue与django中预防CSRF的相关文章

Django中的CSRF

CSRF(Cross Site Request Forgery, 跨站域请求伪造) CSRF 背景与介绍 CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一.其他安全隐患,比如 SQL 脚本注入,跨站域脚本攻击等在近年来已经逐渐为众人熟知,很多网站也都针对他们进行了防御.然而,对于大多数人来说,CSRF 却依然是一个陌生的概念.即便是大名鼎鼎的 Gmail, 在 2007 年底也存在着 C

Django中的csrf基础了解

简介 django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成.而对于django中设置防跨站请求伪造功能有分为全局和局部. 全局: 中间件 django.middleware.csrf.CsrfViewMiddleware 局部: @csrf_protect,为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件. @csrf_exempt,取消当前函数防跨站请求伪造功能,即便s

django中的CBV

CBV介绍 我们在写一个django项目时,通常使用的都是FBV(function base views) 而CBV(class base views)也有它自己的应用场景,比如在写一个按照rest规范写接口时,CBV的适用性就比FBV更强 先来看看CBV在django中的写法,与FBV有什么不同的地方 url(r'^students/', views.StudentsView.as_view()) 路由 from django.views import View class StudentsV

rest framework认证组件和django自带csrf组件区别详解

使用 Django 中的 csrf 处理 Django中有一个django.middleware.csrf.CsrfViewMiddleware中间件提供了全局的csrf检查.它的原理是在<form>标签中生成一个隐藏的<input>标签,提交表单时将这个隐藏的<input>一起提交,服务器端验证这个字段是否正确. 官方给出的csrf的操作步骤是: 在MIDDLEWARE_CLASSES中添加django.middleware.csrf.CsrfViewMiddlewa

Django中如何防范CSRF跨站点请求伪造***

CSRF概念 CSRF跨站点请求伪造(Cross-Site Request Forgery). ***者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了***者所期望的一个操作,比如以你的名义发送邮件.发消息,盗取你的账号,添加系统管理员,甚至于购买商品.虚拟货币转账等. CSRF***原理以及过程 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A: 2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功

1205 CSRF跨站请求与django中的auth模块使用

目录 今日内容 昨日回顾 基于配置文件的编程思想 importlib模块 简单代码实现 跨站请求伪造csrf 1. 钓鱼网站 如何实现 模拟该现象的产生 2. 解决问题 解决 {% csrf_token %} 3. ajax如何解决 方式1 方式2 方式3 4. csrf相关的两个装饰器 1. 使用 2. 两个装饰器在CBV上的异同 django里settings源码剖析 django有两个配置文件 django auth模块 1. 是什么 2. 常用方法 2.1 创建用户 create_use

python框架django中结合vue进行前后端分离

一.创建django项目 1.django-admin startproject mysite # 创建mysite项目 2.django-admin startapp app01# 创建app01应用  二.安装vue 安装vue-cli:npm install -g vue-cli (Vue-cli是Vue的脚手架工具,-g表示在全局下安装vue-cli) 安装webpack: npm install webpack -g  (包管理工具,主要是打包和解包用的) 创建项目:vue init

20:django中的安全问题

本节主要是讲解django中的安全特性,讲述django是如何应对网站一般面临的安全性问题 跨站点脚本(XXS)攻击 跨站点脚本攻击是指一个用户把客户端脚本注入到其他用户的浏览器中.通常是通过在数据库中存储恶意的脚本,当这些脚本被检索然后展示给其他用户时实现的攻击的,或者诱使 用户点击攻击者的那些会被用户浏览器运行的脚本.django是如何应付的呢? django的模板系统可以预防大部分的XXS攻击,然而我们要知道,django预防了那些,还有那些是预防不了的:django模板使用了”转义特殊字

解决跨域问题以及Django中POST传递参数错误

一.跨域 在进行前后端开发的时候需要涉及到跨域的问题,跨域既可以在前端解决也可以在后端解决.前段解决的思路就是转换路径,将发出的请求的url地址转换成可以映射成的地址.后端的解决思路是将获取的地址转换成可以映射的地址. 1. 模型 1.1 前端跨域解决的模型 由于路由router的不同,因此在跨域请求的时候通过更换请求源为origin再对后端进行请求 1.2 后端跨域解决的模型 后端通过可接收的url来进行相同path的处理,揭示了前后端分析的关键点以及跨域解决的本质,即对相同的path进行不同