1. 程式人生 > >Django CSRF跨站請求偽造的禁用和使用

Django CSRF跨站請求偽造的禁用和使用

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