Django CSRF跨站請求偽造的禁用和使用
阿新 • • 發佈:2018-11-24
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>