確保安全的HTTPS(對HTTP加密的幾種技術,前端面試常問)第一篇


HTTP固然足夠好,但是在安全方面有着很大隱患:

1、與服務器進行通信使用的是明文,內容可能會被竊聽(HTTP協議本身並不具備加密功能,所以無法對請求和響應的內容進行加密)

2、使用HTTP協議的服務器與客戶端都不會驗證通信方的身份,可能遭遇偽裝。(所謂不驗證通信方身份的意思是,比如說服務端,在服務端接收到請求的時候,只要請求的信息正確,服務器並不會去驗證,這個請求是否由其對應的客戶端發出。並且,服務器會對請求立即做出一次響應,返回相應的數據)

3、使用HTTP協議的服務器與客戶端都無法驗證報文的完整性,所以在通信過程中,報文有可能會被篡改

等等。

基於這樣的安全問題,衍生出各種加密技術,對於HTTP協議來說,加密的對象有以下兩個:

1、對通信的加密:

    HTTP中沒有加密功能,但是可以通過和SSL(Secure Socket Layer,安全套接層)組合使用,加密通信內容。使用SSL建立安全通信線路后,就可以在這條線路上進行HTTP通信了。與SSL組合使用的HTTP被稱為HTTPS(HTTP Secure,超文本傳輸安全協議)。

 

2、對通信內容本身進行加密

    即對HTTP報文里所包含的內容進行加密。這樣,首先客戶端要先對報文進行加密,然后再發給服務器。服務器在接受到請求時,需要對報文進行解密,再處理報文。該方式不同於SSL將整個通信線路進行加密處理,所以內容仍然有被篡改的風險。

 

A、任何人都可以發起請求

    HTTP協議中,並未有確認通信方這一步驟,所以,任何人都可以發送請求,而服務器在接受到任何請求時,都會做出相應的響應。(僅限於發送端的ip地址和端口號沒有被服務器限制訪問)

所以:

1、無法確認請求發送到目標服務器(按照真實意圖返回響應的那台服務器),這里可能在通信中途被偽裝的服務器返回響應。

2、無法確認響應返回的客戶端是目標客戶端(按照真實意圖接受響應的那台客戶端),可能是偽裝的客戶端。

3、無法判斷請求來自何方、出自誰手。

4、即使是無意義的請求也會都接受(無法阻止海量請求下的DoS(拒絕服務攻擊)攻擊)。

解決方案:

    查明對手的證書

    雖然HTTP不能確認通信方,但SSL是可以的。SSL不僅提供了加密處理,還使用了"證書"的手段,可用於確認通信方。證書是由值得信賴的第三方機構頒布,可用於確定證明服務器和客戶端是實際存在的。所以,只要能確認通信方持有的證書,即可判斷通信方的真實意圖。

 

B、無法判斷報文是否完整(報文可能已遭篡改)

    HTTP協議無法判斷報文是否被篡改,在請求或者響應發出后,在對方接收之前,即使請求或者響應遭到篡改是無法得知的。

    

    防止篡改:

    常用的,確定報文完整性方法:MD5、SHA-1 等 散列值校驗方法,以及用來確認文件的數字簽名方法。但是,使用這些方法,也無法百分百確保結果正確,因為MD5本身被修改的話,用戶是沒辦法意識到得。

    為了有效防止這些弊端,可以采用HTTPS。

 

    

   在iOS開發中,我所遇到的加密技術,一般是使用MD5加鹽對密碼進行加密,這是每個項目必須的。然后就是,有一家公司,采用的是對HTTP報文內容在前端通過加密算法進行加密、解密(也就是我們發送請求給服務器的時候,把model轉化為字符串,然后對字符串進行MD5\AES等方法加密,發送給服務器。然后拿到服務器響應報文中的model字符串,經過解密后,轉化為model)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM