Django入门七之 (中间件)

CSRF (Cross Site Request Forgery)

### 1.`CSRF(Cross Site Request Forgery)`攻击:
1. 跨站请求伪造。在用户不知情的情况下以用户的名义向有`CSRF`漏洞的网站发起攻击,有很大的危害性。
2. 预防:在`header`中添加一个随机`token`,和`cookie`中的`csrftoken`进行比较,如果不相同,则表示该请求是`CSRF`攻击。
3. 原理:网站可以伪造`header`中的东西,但不能读`cookie`中的数据,而`token`是个随机数,所以伪造的`token`很难跟`cookie`中的`csrftoken`保持一致。 ###body 里面的csrf值 必须和cookie里面的值相等,这样才认为是合法的,

'''原理''':
    请求一个页面
    服务器在cookie中设置csrftoken 并且返回给客户
    下次再次请求,用户将cookie里面的csrftoken携带给服务器,服务器将,body中的csrftoken提交上去进行对比
    表单的每一次都会设置cookie

### 2.`XSS(Cross Site Script)`攻击:
1. 攻击形式:是指攻击者向右`XSS`漏洞的网站提交数据从而发起脚本攻击,有`XSS`漏洞的网站没有对该数据进行转义。
2. 对用户提交的数据都进行转义。

### 3. 中间件(Middleware):
1. 什么是中间件:
 * 中间件是在`request`和`view`之间以及`view`到`response`之间做的一些处理。
 * 使用中间件要注意放的顺序。
 
2. 自定义中间件:
创建一个专门存放中间件的文件夹,然后在里面包含一个`__init__.py`文件用来表示这是一个包,然后创建一个中间件的文件,用来存放指定的中间件:
    python
    函数形式:
    def simple_middleware(get_response):
        # 这个中间件初始化的代码

        def middleware(request):
            # request到达view的执行代码
            response = get_response(request)
            # response到达浏览器的执行代码
            return response
        return middleware
        
    python
    类的形式:
    class SimpleMiddleware(object):
        def __init__(self, get_response):
            self.get_response = get_response
            # 这个中间件初始化的代码
            def __call__(self, request):
                # request到达view之前执行的代码
        
                response = self.get_response(request)
        
                # response到达用户浏览器之前执行的代码
        
                return response
 
    定义好以后,要放在`settings.py`的`MIDDLEWARE`中就可以使用了。
    1.10之前是使用类的形式:
        python
    class UserMiddleware(MiddlewareMixin):

    	def process_request(self,request):
    	
    			专门处理请求的
    		
    		userid = hyauth.getuid(request)
    		userModel = models.FrontendUserModel.objects.filter(pk=userid)
    		if userModel:
    			setattr(request,'frontuser',userModel)
    	
        def process_response(request, response):
       
            专门用来处理响应的
            
from books.models import UserModel

def UserMiddleWare(get_response):
    def middleware(requests):
        # requests ----> views 
        username = UserModel.objects.all().first()
        setattr(requests,'myuser',username.name)
    
        response = get_response(requests)
        # views ----> response 
        return response
    return middleware

中间件,顾名思义,就是处在中间的一些软件。比如匹配到了URL,但是还没有执行view函数的时候,这个时候可以执行一些代码,这个代码就是中间件。Django已经内置了许多中间件,这些中间件已经可以满足90%以上的需求,如果你还不够,还可以定义自己的中间件,以下将对Django自带的中间件进行详细解释
:
django.middleware.security.SecurityMiddleware:一些安全设置,比如XSS脚本过滤。

django.contrib.sessions.middleware.SessionMiddleware:session支持中间件,加入这个中间件,会在数据库中生成一个django_session的表。

django.middleware.common.CommonMiddleware:通用中间件,会处理一些URL,比如baidu.com会自动的处理成www.baidu.com。比如/blog/111会处理成/blog/111/自动加上反斜杠。

django.middleware.csrf.CsrfViewMiddleware:跨域请求伪造中间件。加入这个中间件,在提交表单的时候会必须加入csrf_token,cookie中也会生成一个名叫csrftoken的值,也会在header中加入一个HTTP_X_CSRFTOKEN的值来放置CSRF攻击。

django.contrib.auth.middleware.AuthenticationMiddleware:用户授权中间件。他会在每个HttpRequest对象到达view之前添加当前登录用户的user属性,也就是你可以在view中通过request访问user。

django.contrib.messages.middleware.MessageMiddleware:消息中间件。展示一些后台信息给前端页面。如果需要用到消息,还需要在INSTALLED_APPS中添加django.contrib.message才能有效。如果不需要,可以把这两个都删除。

django.middleware.clickjacking.XFrameOptionsMiddleware:防止通过浏览器页面跨Frame出现clickjacking(欺骗点击)攻击出现。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
最近的三年多时间,随着容器技术的火爆及Kubernetes成为容器编排管理的标准,国内外厂商均已开始了全面拥抱Kubernetes的转型, 无数中小型企业已经落地 Kubernetes,或正走在容器化的道路上 。 第一章介绍docker的前世今生,了 解docker的实现原理,以Django项目为例,教大家如何编写最佳的Dockerfile实现构业务镜像的制作。通过本章的学习,大家会知道docker的概念及基本操作,并学会构建自己的业务镜像,并通过抓包的方式掌握Docker最常用的bridge网络模式的通信。 第二章本章学习kubernetes的架构及工作流程,重点介绍如本章学习kubernetes的架构及工作流程,重点介绍如断的滚动更新,通过服务发现来实现集群内部的服务间访问,并通过ingress- -nginx实现外部使用域名访问集群内部的服务。同时介绍基于EFK如何搭建Kubernetes集群的日志收集系统。学完本章,我们的Django demo项目已经可以运行在k8s集群中,同时我们可以使用域名进行服务的访问。第三章本章基于k8s集群部署gitlab、sonarQube、 Jenkins等工具,并把上述工具集成到Jenkins中,以Django项目为例,通过多分支流水线及Jenkinsfle实现项目代码提交到不同的仓库分支,实现自动代码扫描、单元测试、docker容器构建、k8s服务的自动部署。第四章由于公司内部项目众多,大量的项目使用同一套流程做CICD,那么势必会存在大量的重复代码,因此本章主要通过使用groovy实现Jenkins的sharedL ibrary的开发,以提取项目在CICD实践过程中的公共逻辑,提供一系列的流程的接口供公司内各项目调用,开发完成后,还是以Django的demo项目为例,进行Jenkinsfle的改造,最后仅需通过简单的Jenkinsfle的配置,即可优雅的完成CICD流程的整个过程,此方式已在大型企业内部落地应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值