zoukankan      html  css  js  c++  java
  • Django之中间件-CSRF

    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
    

      

      

  • 相关阅读:
    forward redirect 区别
    request response 区别
    Java集合 初步了解
    通过session统计当前在线人数
    Session保存用户名到Session域对象中
    Cookie获取用户的访问记录
    表单中有关于爱好的多选框, 篮球,足球,游泳,跑步, 再有一个多选框,代表全选
    jQuery常用子元素过滤选择器
    jQuery常用属性过滤选择器
    jQuery常见可见性过滤选择器
  • 原文地址:https://www.cnblogs.com/crazytao/p/7787856.html
Copyright © 2011-2022 走看看