Django框架之中间件、CSRF跨站请求伪造

一、中间件

1.什么是中间件

  中间件是一个用来处理Django的请求和响应的框架级别的钩子。它是一个轻量、低级别的插件系统,用于在全局范围内改变Django的输入和输出。每个中间件组件都负责做一些特定的功能。

  中间件是帮助我们在视图函数执行之前和执行之后都可以做一些额外的操作,它本质上就是一个自定义类,类中定义了几个方法,Django框架会在请求的特定的时间去执行这些方法。

2.Django中的中间件

django默认有7个中间件

MIDDLEWARE = [
    ‘django.middleware.security.SecurityMiddleware‘,
    ‘django.contrib.sessions.middleware.SessionMiddleware‘,
    ‘django.middleware.common.CommonMiddleware‘,
    ‘django.middleware.csrf.CsrfViewMiddleware‘,
    ‘django.contrib.auth.middleware.AuthenticationMiddleware‘,
    ‘django.contrib.messages.middleware.MessageMiddleware‘,
    ‘django.middleware.clickjacking.XFrameOptionsMiddleware‘,
]

用户在自定义中间件里面可以写5种方法

process_request:请求来的时候从上往下依次执行每一个中间件里面的process_request

process_response :响应走的时候会从下往上依次执行每一个中间件里面的process_response方法

process_view:路由匹配成功执行视图之前自动触发(从上往下依次执行)

process_exception:当视图函数报错了,自动触发(从下往上依次执行)

process_template_response:视图函数返回的对象有一个render()方法
                        (或者表明该对象是一个TemplateResponse对象或等价方法)

3.自定义中间件

  新建任意名字的文件夹,里面新建任意名字py文件

  导入:from django.utils.deprecation import MiddlewareMixin

  自定义中间件完成后在setting文件中注册

from django.utils.deprecation import MiddlewareMixin

class MyMiddleware(MiddlewareMixin):
    def process_request(self,request):
        print(‘我是第一个自定义中间件里面的process_request方法‘)
        # return HttpResponse(‘heiheihei‘)

    def process_response(self,request,response):
        print(‘我是第一个自定义中间件里面的process_response方法‘)
        return response  # 必须将response形参接收的到数据返回,不然直接报错

    def process_view(self, request, view_func, view_args, view_kwargs):
        print(‘我是第一个自定义中间件里面的process_view方法‘)
        print(view_func.__name__,view_func)

    def process_exception(self,request,exception):
        print(‘我是第一个自定义中间件里面的process_exception方法‘)
        print(exception)

    def process_template_response(self,request,response):
        print(‘我是第一个自定义中间件里面的process_template_response方法‘)
        return response

class MyMiddleware1(MiddlewareMixin):
    def process_request(self,request):
        print(‘我是第二个自定义中间件里面的process_request方法‘)

    def process_response(self,request,response):
        print(‘我是第二个自定义中间件里面的process_response方法‘)
        return response

    def process_view(self, request, view_func, view_args, view_kwargs):
        print(‘我是第二个自定义中间件里面的process_view方法‘)
        print(view_func.__name__,view_func)

    def process_exception(self,request,exception):
        print(‘我是第二个自定义中间件里面的process_exception方法‘)
        print(exception)

    def process_template_response(self,request,response):
        print(‘我是第二个自定义中间件里面的process_template_response方法‘)
        return response

自定义中间件

二、跨站请求伪造

1.什么是跨站请求伪造

  CSRF跨站请求伪造,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。

  可以这样来理解: 攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。

2.跨站请求伪造使用

在form表单中跨站请求伪造

<form action="" method="post">
    {% csrf_token %}
    <p>用户名:<input type="text" name="name"></p>
    <p>密码:<input type="text" name="password"></p>
    <p><input type="submit"></p>
</form>

在Ajax中使用

<button class="btn">点我</button>
</body>
<script>
    $(".btn").click(function () {
        $.ajax({
            url: ‘‘,
            type: ‘post‘,
            data: {
                ‘name‘: $(‘[name="name"]‘).val(),
                ‘password‘: $("#pwd").val(),
                ‘csrfmiddlewaretoken‘: $(‘[name="csrfmiddlewaretoken"]‘).val()},
            success: function (data) {console.log(data)}
            })
    })
</script>

FBV中使用

from django.views.decorators.csrf import csrf_exempt,csrf_protect
    @csrf_exempt  # 局部禁用(前提是全站使用)
    def index1(request):
        return HttpResponse(‘ok‘)

    @csrf_protect  # 局部校验csrf(前提是全站禁用)
    def index2(request):
        return HttpResponse(‘ok‘)

CBV中使用

csrf_protect 和正常的CBV装饰器一样 3种

csrf_exempt 只能加在类或者dispatch上

from django.views import View
from django.views.decorators.csrf import csrf_exempt,csrf_protect
from django.utils.decorators import method_decorator
# 加在类上只能指定方法为dispatch,
@method_decorator(csrf_exempt,name=‘dispatch‘)
class Test(View):
    # @method_decorator(csrf_exempt)
    def dispatch(self, request, *args, **kwargs):
        return super().dispatch(request, *args, **kwargs)

    def get(self,request):
        return render(request,‘index.html‘)

    def post(self,request):
        print(request.POST)
        return HttpResponse(‘ok‘)

原文地址:https://www.cnblogs.com/yuanlianghong/p/11047769.html

时间: 2024-10-11 16:26:45

Django框架之中间件、CSRF跨站请求伪造的相关文章

☆Django☆---中间件 csrf跨站请求伪造 auth模块 settings功能插拔式源码

Django中间件 django生命周期图 中间件: 概念: Django中间件就类似于 django的保安   请求 的时候需要先经过中间件才能到达django后端(urls, views)   响应 走的时候也需要经过中间件才能到达web服务网关接口 django默认的七个中间件 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.Session

Django框架进阶7 django请求生命周期流程图, django中间件, csrf跨站请求伪造, auth认证模块

django请求生命周期流程图 djang中间件 它是django的门户 只要是全局相关的功能你都应该考虑使用django中间件来帮你完成 全局用户身份校验 全局用户访问频率校验 用户访问黑名单 用户访问白名单 # 只要以后用django开发业务 设计到全局相关的功能 你就考虑用中间件 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.Sessio

Django框架(十六)-- 中间件、CSRF跨站请求伪造

一.什么是中间件 中间件是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出 二.中间件的作用 如果你想修改请求,例如被传送到view中的HttpRequest对象. 或者你想修改view返回的HttpResponse对象,这些都可以通过中间件来实现. 可能你还想在view执行之前做一些操作,这种情况就可以用 middleware来实现. Django默认的中间件:(在django项目的settings模块中,有一个 MIDDLE

Django中间件、csrf跨站请求伪造以及基于Django中间件思想实现功能的插拔式配置

一.django中间件 1.1解释:django中间件是类似于是django的保安,请求的时候需要先经过中间件才能到达django后端(urls,views,templates,models),响应走的时候也需要经过中间件才能到达web服务网关接口 1.2django默认的七个中间件 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.Session

五十二、django 中间件,csrf跨站请求伪造,auth模块表

django 中间件 django中间件事类似django的保安,请求的时候需要先经过中间件才能到达django后端(urls,views,templates,models), 响应走的时候也需要经过中间件才能到达web服务网关接口 django中间件中有五个用户可以自定义的方法 django中间件可以用来做什么? 1.网站全局的身份校验,访问频率限制,权限校验..只要涉及到全局的校验都可以在中间件中完成 2.django的中间件是所有web框架中,做的最好 需要掌握的方法有: 1.proces

Django框架 之 基于Ajax中csrf跨站请求伪造

ajax中csrf跨站请求伪造 方式一 1 2 3 $.ajaxSetup({     data: {csrfmiddlewaretoken: '{{ csrf_token }}' }, }); 方式二 1 2 3 4 5 <form> {% csrf_token %} </form><br><br><br>$.ajax({<br>...<br>data:{ "csrfmiddlewaretoken":

Python Django 生命周期 中间键 csrf跨站请求伪造 auth认证模块 settings功能插拔式源码

一 django 生命周期 二 django中间键 1.什么是中间键 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围内改变Django的输入和输出.每个中间件组件都负责做一些特定的功能. 简单来说就相当于django门户,保安:它本质上就是一个自定义类,类中定义了几个方法. 请求的时候需要先经过中间件才能到达django后端(urls,views,templates,models): 响应走的时候也需要经过中间件才能到达w

ajax向Django前后端提交请求和CSRF跨站请求伪造

1.ajax登录示例 urls.py from django.conf.urls import url from django.contrib import admin from app01 import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^login_ajax/$', views.login_ajax, name='login_ajax'), url(r'^index/$', views.index, n

理解CSRF(跨站请求伪造)

理解CSRF(跨站请求伪造) 原文出处Understanding CSRF 对于Express团队的csrf模块和csurf模块的加密函数的用法我们经常有一些在意. 这些在意是莫须有的,因为他们不了解CSRF token是如何工作的. 下面快速过一遍! 读过后还有疑问?希望告诉我们错误?请开一个issue! 一个CSRF攻击是如何工作的? 在他们的钓鱼站点,攻击者可以通过创建一个AJAX按钮或者表单来针对你的网站创建一个请求: <form action="https://my.site.c