django爲用戶實現防止跨站請求僞造的功能,經過中間件 django.middleware.csrf.CsrfViewMiddleware 來完成。而對於django中設置防跨站請求僞造功能有分爲全局和局部。html
中間件 django.middleware.csrf.CsrfViewMiddleware
jquery
@csrf_protect
爲當前函數強制設置防跨站請求僞造功能,即使settings中沒有設置全局中間件。
@csrf_exempt
取消當前函數防跨站請求僞造功能,即使settings中設置了全局中間件。ajax
在表單中加入{% csrf_token %}
csrf.html:django
<form action="/csrf.html" method="post"> {% csrf_token %} <input type="text" name="username" placeholder="username"> <input type="submit" value="form submit"> </form>
經過Ajax提交表單時須要處理請求頭
CSRF請求頭: 'X-CSRFToken'
csrf.html:cookie
<form> <input type="text" name="username" id="username" placeholder="username"> <input type="submit" id="submit" value="ajax submit"> </form> <script src="/static/jQuery.js"></script> <script src="/static/jquery.cookie.js"></script> <script src="/static/csrf.js"></script>
csrf.js:
經過添加 headers函數
$(function () { $('#submit').click(function () { $.ajax({ url: '/csrf.html', type: 'POST', data: {'username': $('#username').val()}, headers: {'X-CSRFToken': $.cookie('csrftoken')}, success: function (data) { alert(data) } }) }); });
經過配置 ajaxpost
$(function () { $.ajaxSetup({ beforeSend: function (xhr, settings) { xhr.setRequestHeader('X-CSRFToken', $.cookie('csrftoken')) } }); $('#submit').click(function () { $.ajax({ url: '/csrf.html', type: 'POST', data: {'username': $('#username').val()}, success: function (data) { alert(data) } }) }); });