python Django里CSRF 对应策略详解
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 认证的
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
详解利用django中间件django.middleware.csrf.CsrfViewMiddleware防止csrf攻击
一.在django后台处理 1.将django的setting中的加入django.contrib.messages.middleware.MessageMiddleware,一般新建的django项目中会自带的. MIDDLEWARE_CLASSES = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middle
-
django的csrf实现过程详解
如果是ajax提交,可以按照下面的方式处理 <script src="/static/jq/jquery-3.3.1.js"></script> <script src="/static/jq/jquery.cookie.js"></script> <script> $(function () { ajax_buttion() }) function ajax_buttion() { $("#bt
-
django框架CSRF防护原理与用法分析
本文实例讲述了django框架CSRF防护.分享给大家供大家参考,具体如下: CSRF防护 一.什么是CSRF? CSRF: Cross-site request forgery,跨站请求伪造 用户登录了正常的网站A, 然后再访问某恶意网站,该恶意网站上有一个指向网站A的链接,那么当用户点击该链接时,则恶意网站能成功向网站A发起一次请求,实际这个请求并不是用户想发的,而是伪造的,而网站A并不知道. 攻击者利用了你的身份,以你的名义发送恶意请求,比如:以你名义发送邮件,发消息,盗取你的账号,甚至于
-
Django CSRF跨站请求伪造防护过程解析
前言 CSRF全称Cross-site request forgery(跨站请求伪造),是一种网络的攻击方式,也被称为"One Click Attack"或者Session Riding,通常缩写为CSRF或者XSRF. 攻击原理 1.用户访问正常的网站A,浏览器就会保存网站A的cookies. 2.用户在访问恶意网站B, 网站B上有某个隐藏的链接会自动请求网站A的链接地址,例如表单提交,传指定的参数. 3.恶意网站B的自动化请求,执行就是在用户A的同一个浏览器上,因此在访问网站A的时
-
Django中如何防范CSRF跨站点请求伪造攻击的实现
CSRF概念 CSRF跨站点请求伪造(Cross-Site Request Forgery). 攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件.发消息,盗取你的账号,添加系统管理员,甚至于购买商品.虚拟货币转账等. CSRF攻击原理以及过程 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A: 在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常
-
解决django前后端分离csrf验证的问题
第一种方式ensure_csrf_cookie 这种方方式使用ensure_csrf_cookie 装饰器实现,且前端页面由浏览器发送视图请求,在视图中使用render渲染模板,响应给前端,此时这个渲染模板的视图函数上要加上这个装饰器 这种方式保证了模板返回时,前端接收到的响应中有csrftoken这个cookie,方法见代码. 以上方法并没有严格意义的前后分离,如果模板中有form表单,可以直接在模板中添加{% csrf_token %}. 第二种方式 前后完全分离,前端页面直接通过获取静态文
-
Django进阶之CSRF的解决
简介 django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成.而对于django中设置防跨站请求伪造功能有分为全局和局部. 全局: 中间件 django.middleware.csrf.CsrfViewMiddleware 局部: @csrf_protect,为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件. @csrf_exempt,取消当前函数防跨站请求伪造功能,即便s
-
python Django里CSRF 对应策略详解
CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的×××方式. 我的理解是,比如你访问过招商银行的网站并登陆之后,你的cookie信息暂时不会失效, 这时,hacker通过各种方式诱导你访问他给你提供的网站等链接,让你在同一浏览器访问 hacker给你的网站时,那么他给你提供的网站里面有直接有向招商银行提交转账信息的请求,这时, 这个转账请求会借用你刚刚登陆过招商银行的cookie信息,来使用的你的身份进行合法的转账. 那么为了减少这个情况的发生,在客
-
python+Django+apache的配置方法详解
本文实例讲述了python+Django+apache的配置方法.分享给大家供大家参考,具体如下: 下载安装xampp套件 下载mod_python-3.3.1.win32-py2.5-Apache2.2.exe 下载python-2.5.4.msi 下载Django 下载MySQL-python-1.2.2.win32-py2.5.exe 1.先安装Python-2.5.4.msi 2.安装 Django-1.1.1-final.tar.gz 解压开,然后解压到某个目录如:(D:/Dev) 在
-
Python Django请求和响应对象详解
目录 Django请求和响应对象 HttpRequest对象 HttpRequest常用属性 中间件设置的属性 QueryDict对象 QueryDict方法 HttpResponse对象 HttpResponse对象用法 HttpResponse对象属性 HttpResponse对象方法 HttpResponse子类 JsonResponse对象 总结 Django请求和响应对象 Django 使用请求和响应对象在系统中传递状态. 当一个页面被请求时,Django 会创建一个 HttpRequ
-
python Django 创建应用过程图示详解
如图输入如下命令 python manage.py startapp apitest 添加应用到 autotest项目项目下 在settings.pyo 中加入"apitest",如下图 创建视图 在apitest/views中添加test 函数 from django.shortcuts import render from django.http import HttpResponse # Create your views here. def test(request): ret
-
Python Django切换MySQL数据库实例详解
准备 软件 版本 Django 2.1.3 Python 3.7.1 默认使用的是sqlite3 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } 切换为MySql: # settings.py DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mys
-
Python Django Vue 项目创建过程详解
1.创建项目 打开pycharm 终端,输入如下,创建项目 # 进入pycharm 项目目录下 cd pyWeb django-admin startproject pyweb_dome # pyweb_dome 是django项目名称 2.创建应用 # 进入项目根目录 pyweb_dome 下 cd pyweb_dome python manage.py startapp webserver # webserver 为应用名 3.创建前端项目 使用vue-cli在根目录创建一个名称叫[fron
-
Python Django 数据库的相关操作详解
目录 前言 创建对象 方式一: 方式二: 更新对象 方式一: 方式二: 方式三: 查询 检索全部对象: 条件过滤: 方式一: 方式二: 检索单个对象: 总结 前言 上篇已经介绍过模型相关操作,并创建好了数据库及相关表字段,接下来将通过以下表在Django中进行表数据的增改查. from django.db import models class Student(models.Model): """ 学生表 """ name = models.Ch
-
python Django的显示个人信息详解
目录 用命令创建Django项目 1.将磁盘切换为D盘 2.在D盘的路径下创建Django项目 3.最后显示新建index文件夹 启动项目 1.输入以下命令启动项目 2.在浏览器中输入http://127.0.0.1:8001/,就可以看到运行结果 3.数据迁移 4.添加app 5.添加index的路径 6.新建一个urls.py文件 7.编写一个视图返回函数 8.在新建的urls文件:里面写入一下代码 9.最后显示结果 10.新建一个templates文件存放welcome.html 11.编
-
Python 中Django安装和使用教程详解
一.安装 一般使用cmd 安装就可以 手动安装通过下载方式 django官方网站:https://www.djangoproject.com/ python官方仓库:https://pypi.python.org/pypi/Django 二.配置使用 1.通过cmd新建一个项目,我是在桌面新建 上面命令会在桌面新建pythonDjango文件夹,在里面会生成如下图两个文件 manage.py:命令行工具,可以用多种方式与该django项目进行交互: 在pythonDjango文件夹里面有4个.p
随机推荐
- PHP 7.1中AES加解密方法mcrypt_module_open()的替换方案
- 阿里云主机一键安装lamp、lnmp环境的shell脚本分享
- mac下设置redis开机启动方法步骤
- 谈一谈JS消息机制和事件机制的理解
- nginx提示502 页面的解决方法
- Java中Date类和Calendar类的常用实例小结
- 一道求$b相对于$a的相对路径的php代码
- 通过chrome浏览器控制台(Console)进行PHP Debug的方法
- PHP执行shell脚本运行程序不产生core文件的方法
- JS延时提示框实现方法详解
- c#初学简单程序实例代码介绍
- Jquery操作下拉框(DropDownList)实现取值赋值
- JavaScript字符串对象fromCharCode方法入门实例(用于把Unicode值转换为字符串)
- 微信小程序 video组件详解
- 关于c语言的一个小bug详解
- 详解Android之图片加载框架Fresco基本使用(一)
- C#实现简单屏幕监控的方法
- iOS开发教程之UIView和UIViewController的生命周期详解
- java中Class.getMethods()和Class.getDeclaredMethods()方法的区别
- 详解Android获取所有依赖库的几种方式