zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    AM8 自定义表情包的实现方法
    Create STKNetDiskC Instance Error
    怎样实现文件发文功能
    企业云盘的数据备份
    一种可行的文档协同编辑方法实现
    【OI】二分图最大匹配
    【OI】位运算操作
    【OI】关于快速幂的简单理解
    【OI】线性筛
    【OI】指针线段树&指针
  • 原文地址:https://www.cnblogs.com/dbf-/p/10936187.html
Copyright © 2011-2022 走看看