• 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

  • 相关阅读:
    C# 给Word每一页设置不同图片水印 E
    C#/VB.NET 将XML转为PDF E
    Java 替换PDF中的字体 E
    C# 读取txt文件生成Word文档 E
    AVL Tree
    Kafdrop
    Python递归遍历目录并删除文件中的前N行
    canal
    中医考研必背针灸歌诀
    nginx(https)代理问题
  • 原文地址:https://www.cnblogs.com/dbf-/p/10936187.html
Copyright © 2020-2023  润新知