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