csrf_token 驗證


在django 中運用 csrf_token 驗證,

排除一些跨站請求攻擊。

首先在settings.py文件中 打開 csrf中間件服務,如果禁用則表示全站禁用

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

 

基本應用:在提交form表單中增加  {%csrf_token%}字符串

<form method="post" action="csrf1.html"> {% csrf_token %} <input type="text" name="name" />
    <input type="submit" value="提交" />
</form>

 

局部禁用:如果在某一些提交表單中不想用到該csrf驗證,則需要添加裝飾器來,局部禁用

from django.views.decorators.csrf import csrf_exempt @csrf_exempt def csrf1(request):
    if request.method == 'GET':
        return render(request,"csrf1.html")
    else:
        return HttpResponse('OK')

 

局部應用:在全局禁用的情況下,針對某個表單單獨應用

from django.views.decorators.csrf import csrf_exempt,csrf_protect @csrf_protect def csrf1(request):
    if request.method == 'GET':
        return render(request,"csrf1.html")
    else:
        return HttpResponse('OK')

 

 

在html文件源碼查看中 會看到一個type=“hidden”的一個文本框,表示添加成功

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<form method="post" action="csrf1.html">
    <input type="hidden" name="csrfmiddlewaretoken" value="q9ENddNVdkalIiUwomlM2BbbKWr8CJolKv0FqFAw9G0rt0pXr4Zof9VPYPu01ekS">
    <input type="text" name="name" />
    <input type="submit" value="提交" />
</form>

</body>
</html>

 

在django框架中的urls.py文件設置好,並在html頁面中測試,出現OK字樣表示csrf驗證成功

def csrf1(request):
    if request.method == 'GET':
        return render(request,"csrf1.html")
    else:
        return HttpResponse('OK')

 

 

Ajax提交時攜帶 csrf_token  第一種方式

首先要獲取到csrf的值,然后在ajax提交中 ,放置在data 中攜帶傳遞 

var csrf = $('input[name ="csrfmiddlewaretoken"]').ral();
data:{"user":user,"csrfmiddlewaretoken":csrf}, --傳參的變量名必須是 csrf__token 隱藏文本框name屬性值,既文本框的名字

 

Ajax提交時攜帶 csrf_token  第二種方式

可以用jquery.cookie.js 這個插件來方便的獲取cookies的值,需要下載並引入

<script src="/static/jquery.cookies.js"></script>

var token = $.cookie('csrftoken');

 

在獲取到cookies中的csrf_token值后在ajax傳參時需要放置在 請求頭(headers)中,並且django有固定的命名規范(“X-CSRFToken”)來獲取值

headers:['X-CSRFToken':token]

 

 

<script src="/static/jquery-1.11.3.js"></script>
<script src="/static/jquery.cookie.js"></script>
<script>
    function submitForm(){
        var token = $.cookie('csrftoken');
        var user = $('#user').val();
        $.ajax({
            url:'/csrf1.html',
            type:'POST',
            headers:{'X-CSRFToken':token},
            data: { "user":user},
            success:function (arg) {
                console.log(arg)
            }

        })
    }
</script>

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM