2017-04-25 14 views
0

我通過沒有HTML表單的AJAX發出POST請求。 是否有任何安全問題? 爲什麼沒有csrf錯誤?因爲我不發送任何csrf數據,並且在django中啓用了csrf?使用Django 1.10 + AJAX而不使用任何HTML表單的安全性

肘status.js

jQuery(document).ready(function($) { 
    $("#switch-status").click(function(){ 
    $.ajax({ 
     url: '/account/switches/', 
     data: {'toggle': 'status'} 
    }); 
    }); 
}); 

view.py

@login_required 
def switches(request): 
    toggle = request.GET.get('toggle', None) 
    current_user = request.user 
    update = Switches.objects.get(owner=current_user) 
    if toggle == 'status': 
    if update.status is True: 
     update.status = False 
    else: 
     update.status = True 
    update.save() 
    return HttpResponse('') 

回答

1

ajax函數的default methodGET一個,而不是一個POST。所以,做一個:

$.ajax({ 
    url: '/account/switches/', 
    data: {'toggle': 'status'} 
}); 

意味着ajax GET被做。所以,你沒有做POST請求。

如果你想有一個POST要求,像這樣做:

$.ajax({ 
    method: 'POST', 
    url: '/account/switches/', 
    data: {'toggle': 'status'} 
}); 

當然,你必須包括CSRF令牌,然後,因爲如果你嘗試POST而不包括一個將失敗。看看here如何實現這一點。

+0

謝謝。 GET有沒有其他安全問題? – seeberg

+0

只要你不通過這種方法傳遞任何敏感數據,那麼不,沒有安全問題。看到[這裏](http://stackoverflow.com/questions/198462/is-either-get-or-post-more-secure-than-the-other)或[這裏](https://security.stackexchange。 com/questions/33837/get-vs-post-which-is-more-secure)瞭解更多信息。 –

+0

@nik_m你能談談嗎? :) –