今天銀行對(duì)app和crm進(jìn)行安全性檢測(cè)舶衬,被查出有明文,之前就用的https,但是crm部分還有在用http箱亿,簡(jiǎn)單的寫(xiě)了一下關(guān)于http和https安全性的問(wèn)題,不同點(diǎn)和處理方法弃秆。
HTTP隱患:
1届惋、與服務(wù)器進(jìn)行通信使用的是明文,內(nèi)容可能會(huì)被竊聽(tīng)(HTTP協(xié)議本身并不具備加密功能菠赚,所以無(wú)法對(duì)請(qǐng)求和響應(yīng)的內(nèi)容進(jìn)行加密)
2脑豹、使用HTTP協(xié)議的服務(wù)器與客戶(hù)端都不會(huì)驗(yàn)證通信方的身份,可能遭遇偽裝衡查。(所謂不驗(yàn)證通信方身份的意思是瘩欺,比如說(shuō)服務(wù)端,在服務(wù)端接收到請(qǐng)求的時(shí)候拌牲,只要請(qǐng)求的信息正確俱饿,服務(wù)器并不會(huì)去驗(yàn)證,這個(gè)請(qǐng)求是否由其對(duì)應(yīng)的客戶(hù)端發(fā)出塌忽。并且拍埠,服務(wù)器會(huì)對(duì)請(qǐng)求立即做出一次響應(yīng),返回相應(yīng)的數(shù)據(jù))
3土居、使用HTTP協(xié)議的服務(wù)器與客戶(hù)端都無(wú)法驗(yàn)證報(bào)文的完整性枣购,所以在通信過(guò)程中,報(bào)文有可能會(huì)被篡改
等等擦耀。
基于這樣的安全問(wèn)題棉圈,衍生出各種加密技術(shù),對(duì)于HTTP協(xié)議來(lái)說(shuō)眷蜓,加密的對(duì)象有以下兩個(gè):
1迄损、對(duì)通信的加密:
HTTP中沒(méi)有加密功能,但是可以通過(guò)和SSL(Secure Socket Layer账磺,安全套接層)組合使用芹敌,加密通信內(nèi)容痊远。使用SSL建立安全通信線路后,就可以在這條線路上進(jìn)行HTTP通信了氏捞。與SSL組合使用的HTTP被稱(chēng)為HTTPS(HTTP Secure碧聪,超文本傳輸安全協(xié)議)。
2液茎、對(duì)通信內(nèi)容本身進(jìn)行加密
即對(duì)HTTP報(bào)文里所包含的內(nèi)容進(jìn)行加密逞姿。這樣,首先客戶(hù)端要先對(duì)報(bào)文進(jìn)行加密捆等,然后再發(fā)給服務(wù)器滞造。服務(wù)器在接受到請(qǐng)求時(shí),需要對(duì)報(bào)文進(jìn)行解密栋烤,再處理報(bào)文谒养。該方式不同于SSL將整個(gè)通信線路進(jìn)行加密處理,所以?xún)?nèi)容仍然有被篡改的風(fēng)險(xiǎn)明郭。SSL不僅提供了加密處理买窟,還使用了"證書(shū)"的手段,可用于確認(rèn)通信方薯定。
1.任何人都可以發(fā)起請(qǐng)求
HTTP協(xié)議中始绍,并未有確認(rèn)通信方這一步驟,所以话侄,任何人都可以發(fā)送請(qǐng)求亏推,而服務(wù)器在接受到任何請(qǐng)求時(shí),都會(huì)做出相應(yīng)的響應(yīng)年堆。(僅限于發(fā)送端的ip地址和端口號(hào)沒(méi)有被服務(wù)器限制訪問(wèn))
所以:
1吞杭、無(wú)法確認(rèn)請(qǐng)求發(fā)送到目標(biāo)服務(wù)器(按照真實(shí)意圖返回響應(yīng)的那臺(tái)服務(wù)器),這里可能在通信中途被偽裝的服務(wù)器返回響應(yīng)嘀韧。
2篇亭、無(wú)法確認(rèn)響應(yīng)返回的客戶(hù)端是目標(biāo)客戶(hù)端(按照真實(shí)意圖接受響應(yīng)的那臺(tái)客戶(hù)端),可能是偽裝的客戶(hù)端锄贷。
3译蒂、無(wú)法判斷請(qǐng)求來(lái)自何方、出自誰(shuí)手谊却。
4柔昼、即使是無(wú)意義的請(qǐng)求也會(huì)都接受(無(wú)法阻止海量請(qǐng)求下的DoS(拒絕服務(wù)攻擊)攻擊)。
解決方案:
查明對(duì)手的證書(shū)
雖然HTTP不能確認(rèn)通信方炎辨,但SSL是可以的捕透。SSL不僅提供了加密處理,還使用了"證書(shū)"的手段,可用于確認(rèn)通信方乙嘀。證書(shū)是由值得信賴(lài)的第三方機(jī)構(gòu)頒布末购,可用于確定證明服務(wù)器和客戶(hù)端是實(shí)際存在的。所以虎谢,只要能確認(rèn)通信方持有的證書(shū)盟榴,即可判斷通信方的真實(shí)意圖。
2.無(wú)法判斷報(bào)文是否完整(報(bào)文可能已遭篡改)
HTTP協(xié)議無(wú)法判斷報(bào)文是否被篡改婴噩,在請(qǐng)求或者響應(yīng)發(fā)出后擎场,在對(duì)方接收之前,即使請(qǐng)求或者響應(yīng)遭到篡改是無(wú)法得知的几莽。
防止篡改:
常用的迅办,確定報(bào)文完整性方法:MD5、SHA-1 等 散列值校驗(yàn)方法章蚣,以及用來(lái)確認(rèn)文件的數(shù)字簽名方法站欺。但是,使用這些方法究驴,也無(wú)法百分百確保結(jié)果正確镊绪,因?yàn)镸D5本身被修改的話匀伏,用戶(hù)是沒(méi)辦法意識(shí)到得洒忧。
在iOS開(kāi)發(fā)中,我所遇到的加密技術(shù)够颠,一般是使用MD5對(duì)密碼熙侍,交易密碼進(jìn)行加密,這是每個(gè)項(xiàng)目必須的履磨。