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

  • 相关阅读:
    request 请求 转 json
    图片缩略图 简单应用
    文件压缩下载 和 解压缩并解析
    简单 map 与 xml 互转
    SVN+vs2017
    cordova生成签名的APK
    海关 实时数据 企业联调接口 总结
    vs2017远程调试
    X509证书 指定了无效的提供程序类型 System.Security.Cryptography.CryptographicException 错误解决方法
    微信公众号开发 ,redirect_uri域名还是与后台配置不一致
  • 原文地址:https://www.cnblogs.com/dbf-/p/10936187.html
Copyright © 2011-2022 走看看