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(欺骗点击)攻击出现。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章