且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Django CSRF跨站请求伪造的禁用和使用

更新时间:2022-05-19 05:07:36

CSRF (Cross-site request forgery)

Django后台设置

全局和局部设置

# 全站使用
    'django.middleware.csrf.CsrfViewMiddleware',
    
# 局部禁用
    from django.views.decorators.csrf import csrf_exempt

    @csrf_exempt
    def csrf_demo(request):
        if request.method == 'POST':
            return HttpResponse('POST OK')
            
# 全站禁用
    # 'django.middleware.csrf.CsrfViewMiddleware',
        
# 局部使用  
    from django.views.decorators.csrf import csrf_protect

    @csrf_protect
     def csrf_demo(request):
        if request.method == 'POST':
            return HttpResponse('POST OK')

前端使用

Form表单中使用

Ajax请求使用

  • 获取:Form表单 或 cookie
  • 使用:data数据 或 headers
<!-- Form表单中使用 -->
<form method="POST" action="/csrf_demo.html">
    {% csrf_token %}
    <input id="user" type="text" name="user" />
    <input type="submit" value="提交"/>
</form>


<!-- Ajax中使用 -->
<script>
    function submitForm(){
        // 从form 表单中获取
        var token = $('input[name="csrfmiddlewaretoken"]').val();
        
        // 从cookie 中获取
        // var token = $.cookie('csrftoken');
        
        var user = $('#user').val();
        $.ajax({
            url: '/csrf_demo.html',
            type: 'POST',
            // data 数据中使用
            data: { 
                "user":user,
                'csrfmiddlewaretoken': token
            },
            // headers 中使用
            // headers:{'X-CSRFToken': token},
            success:function(arg){
                // do something
            }
        })
    }

</script>

参考

django-csrf使用和禁用