CSRF
a.CSRF原理
post提交时需要提交csrf_token ,缺少则不通过
在form表单中加入:
{% csrf_token %}
b.无CSRF时存在隐患
防护其他人通过别的链接post提交
c.Form提交(CSRF)
{% csrf_token %}
d.Ajax提交(CSRF) ----L22-capture-10
CSRF请求头:X-CSRFtoken
在所有ajax请求加入请求头
$(function(){
$.ajanxSetup({
beforeSend:function(xhr,settings){
#xhr:XMLHttpRequst() ajax封装的xhr方法
xhr.setRequestHeader('X-CSRFtoken',$.cookie('csrftoken'))
}
})
$('#btn1').click(function(){
$.ajax({
url:'/login/',
type:'POST'
data:{‘user’:123}
success:function(arg){
...
}
})
})
})
局部加上CSRF:
@csrf_exempt 单一的排除
@csrf_protect 单一的加上
中间件(管道,httphandle类)
1.原理
settings中的MIDDLEWARE
对所有请求做统一的处理
2.操作
from django.utils.deprecation import MiddlewareMixin
class Row1(MiddlewareMixin):
#请求开始
def process_request(self,request):
print('row1')
if True:
pass
else:
return HttpResponse
#url(r'^test/(?p<nid>d+)$',views.test)
#获取路由系统中的参数,和test函数
def process_view(self,request,view_func,view_func_args,view_func_kwargs):
print('row1_view')
#请求返回
def process_response(self,request,response):
return response
def process_exception(self,request,exception): #views 中出错就执行
if isinstance(exception,ValueError):
return HttpResponse('valueError')
def process_template_response(self,request,response):
#如果views中的函数返回的对象中,具有render方法
print('------')
return response
