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