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)。
朋友們,雖然這個世界日益浮躁起來,只要能夠為了當時純粹的夢想和感動堅持努力下去,不管其它人怎麼樣,我們也能夠保持自己的本色走下去。
GML物件的層次結構
gml是乙個複雜的標準。本文的內容以ogc gml 3.1.0為參考標準。它包含的內容非常多,除常規的二維向量gis資訊以外,還包括複雜目標 拓撲資訊 三維目標 時態資訊 地理覆蓋 註記符號 空間參考 元資料 柵格資料等等資訊。和gml2版本不同,gml3.1.0中的feature並不總是幾何物件,...
GML物件的層次結構
gml是乙個複雜的標準。本文的內容以ogc gml 3.1.0為參考標準。它包含的內容非常多,除常規的二維向量gis資訊以外,還包括複雜目標 拓撲資訊 三維目標 時態資訊 地理覆蓋 註記符號 空間參考 元資料 柵格資料等等資訊。和gml2版本不同,gml3.1.0中的feature並不總是幾何物件,...
DOM物件的層次
一 介紹 文件物件模型採用的分層結構為樹形結構,以樹節點的方式表示文件中的各種內容。先以乙個簡單的html文件說明一下。二 加粗內容 三 執行結果加粗內容四 文件的層次結構 五 概念介紹 1 根節點 在最頂層的節點,稱為根節點。2 父節點 乙個節點之上的節點是該節點的父節點 parent 例如,是和...