前言 大家好,我是蝸牛,在上一篇中,我們介紹了不同版本的HTTP區別和發展背景,這篇文章我們來聊聊HTTP的缺點,HTTP缺點大致總結有以下三點: 通信使用明文(不加密),內容可能會被竊聽。 不驗證通信方的身份,因此有可能遭遇偽裝(客戶端和服務端都有可能) 無法證明報文的完整性,有可能會被篡改。 其 ...
前言
大家好,我是蝸牛,在上一篇中,我們介紹了不同版本的HTTP區別和發展背景,這篇文章我們來聊聊HTTP的缺點,HTTP缺點大致總結有以下三點:
- 通信使用明文(不加密),內容可能會被竊聽。
- 不驗證通信方的身份,因此有可能遭遇偽裝(客戶端和服務端都有可能)
- 無法證明報文的完整性,有可能會被篡改。
其實以上問題不止HTTP有,其他未加密的協議也有此類問題,下麵就以上三點詳細介紹
通信使用明文(不加密),內容可能會被竊聽
因為HTTP不具備加密的功能,所以無法對通信報文進行加密,所以是使用明文進行發送,那麼就有可能被竊聽。
可以看到竊聽無處不在
竊聽的方式有多種,比較常見有抓包工具(Wireshark)或者嗅探器(Sniffer)等工具,進行竊聽。
下麵圖片是使用Wireshark抓取的數據:
如何防止
-
通信的層加密
通過HTTP與SSL/TLS的組合使用(SSL/TSS後續章節介紹),可以加密http通信內容。
-
通信報文內容加密
雙方約定好密鑰,在傳輸前對原報文進行一個加密,傳輸至服務端或客戶端在進行解密,因為此類方式不同於https方式,所以還是有一定的風險。
- 密鑰不是一次一密,而且是內嵌在代碼中,都有可能被獲取。
- 如果是基於瀏覽器的工程,那麼這個密鑰是內嵌在js中的,而js是可以訪問的,那麼就有可能被獲取。
- 如果是app工程中,也有可能被反編譯獲取。
不驗證通信方的身份,因此有可能遭遇偽裝
HTTP協議的請求與響應不會對通信方進行身份的確認,因此這種無法確認通信方,總結有以下幾類問題:
- 無法確定請求目標的Web伺服器是否,真正要訪問的伺服器。
- 無法確定客戶端是否是真實要響應的客戶端。
- 無法確定正在通信的雙方是否具備訪問許可權,比如:提供的WEB服務只想開發給指定的客戶端訪問。
- 無法判定請求來自何方,出自誰手。
- 即使是無意義的請求,也會照單全收。如海量的Dos攻擊。
如何防止
使用SSL才可以防止此類問題,SSL不僅提供加密功能,還提供證書,通過證書可以確定通信的方是意料之中的,這裡肯定有人會問那證書如何保證可信呢?
證書是有公認值得信賴的CA機構頒發的,其他機構是沒有頒發證書許可權的。CA機構是可信賴的,那麼頒發的證書也是可信賴的。
客戶端驗證服務端是否是可信的服務端,即單向認證。
客戶端與服務端相互認證,即雙向認證。
無法證明報文的完整性,有可能會被篡改
所謂完整性是指信息的準確度,無法證明完整性,那麼也就無法判定信息是否準確。
由於HTTP協議無法證明通信的完整性,那麼請求或者響應過程中報文就有可能被篡改,而服務端或者客戶端是無法感知的。
比如從網上下載的內容,是無法確認下載後的內容是否跟伺服器上的內容一致。
像這樣在請求/響應途中,遭攻擊者攔截並篡改內容攻擊,稱為中間人攻擊。
如何防止
- 使用md5/sha1/pgp來確定報文完整性的方法
點擊下載後,可以查看對應文件簽名或者散列值,當我點擊MD5後,如下圖:
通過對下載後文件在通過MD5生成散列碼,與官網上的散列碼進行比較,來確定文件是否被篡改。
但是從其他方式證明此種方式也不是絕對安全的,具體可以參見:http://bobao.360.cn/news/detail/768.html大概意思就是構造”首碼碰撞法“,來製造MD5值一樣,文件內容不一樣的文件。
總結
HTTP雖然使用極為廣泛, 但是卻存在不小的安全缺陷, 主要是其數據的明文傳送和消息完整性檢測的缺乏, 而這兩點恰好是網路支付, 網路交易等新興應用中安全方面最需要關註的
因此為瞭解決以上問題需要和SSL/TLS相關協議組合,這就是HTTPS,下篇我們介紹HTTPS