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

版权声明:本文为博主原创文章,欢迎转载,请注明出处 https://blog.csdn.net/mouday/article/details/84143834

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使用和禁用

猜你喜欢

转载自blog.csdn.net/mouday/article/details/84143834