Django – CSRF 避坑

1.Django+vue開發(fā)發(fā)送POST請求

1.針對el-select這種組標簽,采用了 {% csrf_token %}的 方式
2.對于el-input 這種單標簽,采用了getCookie的方式

2.Ajax實現(xiàn)表單提交

Ajax向服務器發(fā)送POST請求時,請求參數(shù)必須添加csrf_token的信息,否則服務器會視該請求為惡意請求。

<script>
    function submitForm(){
        var csrf = $('input[name="csrfmiddlewaretoken"]').val();
        var user = $('#user').val();
        var password = $('#password').val();
        $.ajax({
              url : '/csrf1.html',
              type : 'POST',
              data : { "user":user, "password":password, "csrfmiddlewaretoken":csrf}
              success:function(arg){
                    console.log(arg);
               }
        })
   }
</script>  

3.特殊情況

如果在配置文件setting.py 中刪除了中間件CsrfViewMiddleware,這樣是整個網(wǎng)站都取消了CSRF防護。在全站沒有CSRF防護的情況下,又想對某些請求設置CERF防護,那么在模板上添加模板語法{% scrf_token %},然后在相應的視圖函數(shù)中添加裝飾器@csrf_protect即可實現(xiàn)

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def registerView(request):
  pass
  return render(request,'user.html',locals())

如果只是在模板上刪除{% csrf_token %},并沒有在相應的視圖函數(shù)中設置過濾器@csrf_exempt,那么當用戶提交表單時,程序因CSRF驗證失敗而拋出403異常的頁面

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容