https可否有效應對dns劫持、http內容劫持

前言

       近期客戶端爲了縮包,對很多項目進行了h5化相關的工作,但在上線後發現有部分內容被http內容劫持,具體現象就是部分頁面被植入廣告,由於之前大多采用http協議,被劫持肯定是束手無策,因此準備切換協議,而https多了關於域名證書驗證與交互數據加密的步驟,之前也有對過https交互原理以及Charles抓包工具的原理做過相關學習總結,詳見 https原理初探

       https是建立於http的基礎上,加上了ssl(Secure Sockets Layer安全套接層)協議的網絡傳輸協議,其中通過數字證書、對稱與非對稱加密、數據完整性摘要等技術,完成數據傳輸的保密性、完整性。而我們使用https就能完全應對網絡安全中的dns劫持http內容劫持嗎?

正文

dns劫持、http內容劫持

dns劫持

       由於我們在瀏覽器或webapp中與服務端的交互大多是通過協議+域名進行的,而對於域名映射到ip這個步驟要經過本機請求dns服務器的過程,因此除了受信任的dns根服務器,中間緩存的各種dns服務器都有可能被黑或者被運營商利用篡改,比如www.baidu.com正常是映射到61.135.169.125這個公網ip,黑客或者惡意份子將dns服務器對於該域名的公網ip解析改成26.135.169.123,那麼我們在某個地域訪問www.baidu.com得到的結果就是26.135.169.123這臺服務器返回的內容,並且在http協議訪問的情況下毫無感知。

http內容劫持

        相對dns劫持,http內容劫持就沒有那麼直接暴力了,單獨的http內容劫持不會篡改對應網頁的服務器ip地址,而是會對網頁返回的內容進行篡改,如訪問www.baidu.com,本來應該得到的就是正常的百度首頁,但是卻出現了廣告彈窗,這就是webapp或者瀏覽器通過http協議訪問後,被惡意份子在數據返回中增加了網頁的彈窗數據導致,而我們當前遇到的就是這個問題,針對內容劫持,http協議由於缺少對於數據的完整性驗證,也沒有辦法應對。

       兩種劫持的結果,用通俗的話來說就是這樣,我們想打車去超市買瓶可樂,dns劫持出租車將我們拉到了加油站;http內容劫持把我們拉到了超市,在我們拿到可樂前往裏面添加了其他不想要的東西。

https對於劫持的效果

       對於http協議來說,根據我們前面的結論兩種劫持方式都不能得到有效的應對方式,而如果我們對相應域名及服務上了https協議呢?如test-h5.com被運營商或其他惡意份子將dns篡改至廣告服務器地址F,瀏覽器使用https協議在與test-h5.com進行數據交互之前,需要獲取域名對應證書,此時地址F的服務器返回一個假的證書,接着向CA或者本地跟證書驗證對應域名證書合法性,瀏覽器必然會顯示證書安全有問題,此時用戶如果點擊信任該證書並且繼續瀏覽,則便進入了被劫持的h5頁面。但這個安全提示還是可以有效的抑制對https域名的dns劫持。
https交互流程圖
證書不受信任
       而http內容劫持,由於https數據交互存在兩端交互數據摘要的hash校驗,如果內容校驗不一直便會報錯,因此https可以完全解決 惡意針對某個域名下返回數據增加廣告彈窗等http的內容劫持,但也無法避免惡意份子直接僞造證書、接口數據等方式的dns+內容雙重劫持,這種情況下只要用戶選擇信任該證書依舊會導致問題出現。

非全站https

       從上述所說的在https場景下劫持後的效果,可以看出當前對於瀏覽器、webapp中訪問https域名的網頁可以有效抵抗劫持,但如果是非全站的https(如圖片、js引用、文本等url,整個網站中存在非https的站點),依舊會在瀏覽器上顯示並不友好的提示,比如chrome會提示 此網頁正試圖從未經驗證的來源加載腳本,左邊的https也會被警告,因此建立全站https還是挺有必要的。非全站https也不僅只是在單獨一個頁面中所有元素的都是https,整個網站中如果存在非http站點,在http向https站點跳轉時,惡意份子也可以通過xss注入修改頁面元素,使用戶無法通過https訪問對應站點。
加載不安全腳本
不安全的https

http改https會遇到的問題

       本次改動設計到大量h5化的客戶端協議改造,跨域也是一個較大的問題,比如對於一個文件,www.cloudlearn.speiyou.com/test.img,這個文件之前的跨域訪問規則是允許http協議的客戶端訪問(如Access-Control-Allow-Origin: http://test-h5.com),在客戶端的webapp承載頁改成https(https://test-h5.com)之後,之前的http協議允許的跨域規則便無法通過,這就跟跨域規則限制三元組有關係了(協議、域名、端口),因此還需要配合增加https的跨域。

       爲了保證在之後不再出現http轉https的情況,我們可以在後續開發新項目、域名時對應的服務僅支持https協議,即80端口不開放,僅開放443的https端口。

總結

        簡要概述了https原理、dns劫持、http內容劫持的現象及原理,並且在引入https後能否完全避免這兩種劫持也在相應場景下作了探討,畢竟https是保證的數據加密傳輸,雖無法完全避免這些劫持現象,但在數據加密的基礎上也可以有效的減少被劫持的不安全現象,因此儘量採用https作爲應用層協議還是必要的。

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