• Django CSRF


    CSRF(Cross-site request forgery)跨站请求伪造

    django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成。而对于django中设置防跨站请求伪造功能有分为全局和局部。

    全局

    中间件 django.middleware.csrf.CsrfViewMiddleware

    局部

    @csrf_protect为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件。
    @csrf_exempt取消当前函数防跨站请求伪造功能,即便settings中设置了全局中间件。

    应用

    Form提交(CSRF)

    在表单中加入{% csrf_token %}
    csrf.html:

    <form action="/csrf.html" method="post">
        {% csrf_token %}
        <input type="text" name="username" placeholder="username">
        <input type="submit" value="form submit">
    </form>
    
    Ajax提交(CSRF)

    通过Ajax提交表单时需要处理请求头
    CSRF请求头: 'X-CSRFToken'
    csrf.html:

    <form>
        <input type="text" name="username" id="username" placeholder="username">
        <input type="submit" id="submit" value="ajax submit">
    </form>
    <script src="/static/jQuery.js"></script>
    <script src="/static/jquery.cookie.js"></script>
    <script src="/static/csrf.js"></script>
    

    csrf.js:
    通过添加 headers

    $(function () {
        $('#submit').click(function () {
            $.ajax({
                url: '/csrf.html',
                type: 'POST',
                data: {'username': $('#username').val()},
                headers: {'X-CSRFToken': $.cookie('csrftoken')},
                success: function (data) {
                    alert(data)
                }
            })
        });
    });
    

    通过配置 ajax

    $(function () {
        $.ajaxSetup({
            beforeSend: function (xhr, settings) {
                xhr.setRequestHeader('X-CSRFToken', $.cookie('csrftoken'))
            }
        });
        $('#submit').click(function () {
            $.ajax({
                url: '/csrf.html',
                type: 'POST',
                data: {'username': $('#username').val()},
                success: function (data) {
                    alert(data)
                }
            })
        });
    });
    

    使用

    当客户端发出 get 请求后,服务器会通过 Cookie 给客户端发送一个 csrftoken
    在客户端发出 post 请求时,需要在请求的 Cookie 中写入 csrftoken,并同时提交隐藏在 form 表单中的 csrfmiddlewaretoken

  • 相关阅读:
    TCP报文发送工具
    Java基础—注解的使用
    STM32以太网ETH
    EC20 minipcie版4g模块开发笔记
    usb端点(endpoint)知识详解
    STM32 usb_mem.c和usb_sil.c文件的分析
    USB的中断说明
    STM32 可编程电压监测器(PVD)实现数据掉电保存
    关于FSMC地址线的理解
    STM32F4—fsmc的配置步骤
  • 原文地址:https://www.cnblogs.com/dbf-/p/10936187.html
Copyright © 2020-2023  润新知