• 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
    

      

      

  • 相关阅读:
    redis的五种常见数据类型的常用指令
    Linux常用的命令
    moco操作
    如何使用GoEasy实现PHP与Websocket实时通信
    浅谈websocket
    nginx 配置虚拟主机访问PHP文件 502错误的解决方法
    集群/分布式环境下5种session处理策略
    nginx 集群
    使用Nginx实现反向代理
    nginx的配置和基本使用命令
  • 原文地址:https://www.cnblogs.com/crazytao/p/7787856.html
Copyright © 2020-2023  润新知