秒懂HTTP之基本認證(Basic Authentication)

版權申明】非商業目的註明出處可自由轉載
博文地址:https://blog.csdn.net/ShuSheng0007/article/details/89598299
出自:shusheng007

系列文章:
秒懂HTTP之URL與資源

概述

毫無疑問在現今的中國,網絡已經成爲廣大人民羣衆日常的基本生活資料,我相信網絡在極大豐富人民羣衆日常生活的同時,網絡安全問題在中國將變得日益突出,如果你有志於投身計算機行業,相信網絡安全是一個不錯的方向。
而在Web的世界裏,‘Http’ 家族絕對是霸主。而且前段時間,二狗公司的產品疑似發生了被攻擊事件,後來證實是Vendor誤報,在此過程中也迫使二狗對現在產品的網絡安全設計做了一個審視。其中用到了Basic Authentication,我們今天就談談Http的安全認證機制。

HTTP 的認證機制

http協議支持兩種認證方式:基本認證和摘要認證。

什麼是認證

認證就是要給出身份證明,證明你就是你聲稱的那個人。

例如王二狗和牛翠花兩個人在網上都互動半年了還沒有見面,於是二狗向翠花發出了誠摯的邀請:翠花,五一來天津玩吧,我請你吃麻辣燙!本來二狗想先視頻一下到時候好認人,但翠花說那樣就沒有驚喜感了。於是兩人就採取了最原始的認證方式:對暗號,到時候翠花喊:天王蓋地虎。二狗就喊:翠花好漂亮。

HTTP 基本認證

大體流程就類似於牛翠花和王二狗接頭的過程。
1.翠花:走到一個人面前說,二狗帶我去吃麻辣燙吧。
2.二狗:請說出你的暗號。
3. 翠花:天王蓋地虎。
4.二狗:張亮麻辣燙走起。。。

映射到編程領域爲:

  1. 客戶端(例如Web瀏覽器):服務器,請把/family/son.jpg 圖片傳給我。

    GET /family/son.jpg  HTTP/1.1
    
  2. 服務器:客戶端你好,這個資源在安全區family裏,是受限資源,需要基本認證,請帶上你的用戶名和密碼再來

    HTTP/1.1 401 Authorization Required
    www-Authenticate: Basic realm= "family"
    

    服務器會返回401,告知客戶端這個資源需要使用基本認證的方式訪問,我們可以看到在 www-Authenticate這個Header裏面 有兩個值,Basic:說明需要基本認證,realm:說明客戶端需要輸入這個安全區的用戶名和密碼,而不是其他區的。因爲服務器可以爲不同的安全區設置不同的用戶名和密碼。如果服務器只有一個安全區,那麼所有的基本認證用戶名和密碼都是一樣的。

  3. 客戶端: 服務器,我已經按照你的要求,攜帶了相應的用戶名和密碼信息了,你看一下

    如果客戶端是瀏覽器,那麼此時就會彈出一個彈窗,讓用戶輸入用戶名和密碼。

    Basic 內容爲: 用戶名:密碼 後的base64 內容.假設我的用戶名爲Shusheng007,密碼爲ss007 那麼我的Basic的內容爲 Shusheng007:ss007 對應的base64 編碼內容U2h1c2hlbmcwMDcldUZGMUFzczAwNw==,如下所示

    GET /family/son.jpg  HTTP/1.1
    Authorization: Basic U2h1c2hlbmcwMDcldUZGMUFzczAwNw==
    
  4. 服務器:客戶端你好,我已經校驗了你的用戶名和密碼,是正確的,這是你要的資源。

    HTTP/1.1 200 OK
    Content-type: image/jpg
    ...
    

至此這個HTTP事務就結束了,非常簡單的一個認證機制,不過缺點也是蠻多的。

HTTP 基本認證的優缺點

優點

簡單,被廣泛支持

缺點

不安全

安全分幾個層面:內容的篡改及嗅探。這是HTTP協議本身存在的問題,所以很難根除,以後的網絡世界會慢慢全部轉爲使用更加安全的HTTPS的。

1 用戶HTTP是在網絡上裸奔的,所以這個基本認證的用戶名和密碼也是可以被人看到的,雖然它使用了Base64來編碼,但這個編碼很容易就可以解碼出來。

2 即使這個認證內容不能被解碼爲原始的用戶名和密碼也是不安全的,惡意用戶可以再獲取了認證內容後使用其不斷的享服務器發起請求,這就是所謂的重放攻擊

3 像中間人攻擊就更不能防止了,中間人可以修改報文然後請求服務器。

HTTP 基本認證使用場景

內部網絡,或者對安全要求不是很高的網絡。現如今HTTP基本認證都是會結合HTTPS一起使用的,https保證網絡的安全性,然後基本認證來做客戶端身份識別。

在結合了HTTPS後,Basic Authentication 可以說還是有一定的市場的,但是其重要性正在降低。因爲合適的使用場景太少。我們可以想象一下:如果服務器是允許匿名用戶訪問的,那你就沒有必要認證。如果服務器是不允許匿名訪問的,那麼需要用戶註冊,就會使用用戶憑證認證,也不需要基本認證。只有那種只需要一個特定密碼就可以訪問的場景,例如加了提取碼的網盤資源。

我們公司移動APP端使用到了基本認證,用來認證某個到我們服務器的請求是從我們自己的APP發出的,而不是異常來源。

總結

HTTP 是程序員的基本素養,在現在以及可以預見的將來會更加重要,只要是還在做技術就應該注意積累這部分知識。

不知道翠花吃了多少錢的麻辣燙,吃的多了怕二狗晚上受不了啊, 能意會的都是老司機。。。

最後,求關注,求點贊!有任何疑問可以評論留言,我會盡力回覆的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章