HTTP劫持和DNS劫持 騰訊的實際業務分析

2022-03-25 13:20:12 字數 2380 閱讀 5494

簡單介紹一下http劫持和dns劫持的概念,也就是運營商通過某些方式篡改了使用者正常訪問的網頁,插入廣告或者其他一些雜七雜八的東西。

首先對運營商的劫持行為做一些分析,他們的目的無非就是賺錢,而賺錢的方式有兩種:

1、對正常**加入額外的廣告,這包括網頁內浮層或彈出廣告視窗;

在具體的做法上,一般分為dns劫持和http劫持。

dns劫持:

一般而言,使用者上網的dns伺服器都是運營商分配的,所以,在這個節點上,運營商可以為所欲為。

http劫持:

在運營商的路由器節點上,設定協議檢測,一旦發現是http請求,而且是html型別請求,則攔截處理。後續做法往往分為2種,1種是類似dns劫持返回302讓使用者瀏覽器跳轉到另外的位址,還有1種是在伺服器返回的html資料中插入js或dom節點(廣告)。

在使用者角度,這些劫持的表現分為:

1、**被無辜跳轉,多了推廣尾巴;

2、頁面出現額外的廣告(iframe模式或者直接同頁面插入了dom節點)。

處理辦法:

1、先對外網做檢測,上報被劫持的情況。

對於我這個業務而言,加推廣尾巴沒意義,那麼就剩下植入廣告的問題了。頁面廣告可能通過iframe方式,也可以通過dom節點方式,需要在首頁檢查這兩種情況。

(注:事後發現這個url檢查不夠嚴謹,雖然劫持的情況都能發現,但也把產品原有的一些正常插入做劫持誤報了。例如,不過這個是小細節,把正規表示式完善一下就ok了)

2、針對被iframe載入的情況,需要先找到運營商設定的劫持規律。

在iframe中的網頁能正常開啟,而不是又被攔截加iframe,可能是因為請求的url上或cookie上運營商做了標記。我們可以利用這個規則,躲過劫持。

3、針對注入dom節點的情況,初始化時做檢查,而且後續dom注入也做檢查。可以檢查dom中是否含有白名單以外的http鏈結,如果有,就可以判定為http劫持。

4、在前端以外的處理辦法還有

a) 終端攔截所有返回包,判斷ip來自黑名單(劫持的中間ip)則丟棄返回包。

這種做法的原因是,運營商劫持http請求後,並不是完全丟棄請求包,而是做了複製,乙份繼續發給目標伺服器,另外乙份做劫持處理直接返回302。因為這個302會比目標伺服器的正常返回早得多,所以使用者瀏覽器會只認第乙個302,而丟棄後到的正常返回。

如果先把第乙個302丟棄,等待後續正常返回,則問題解決。

b) 終端攔截請求包,並拆包傳送。

運營商一般判斷是否劫持,通過判斷是否http請求。 一般只會檢測tcp連線建立後的第乙個資料報,如果其是乙個完整的http協議才會被標記;如果並非是乙個完整的http協議,由於無法得到足夠多的劫持資訊,所以並不會被標記為http協議。 

所以,只要把請求包切得足夠細,就能躲過一部分劫持(如果運營商學習「牆」大力氣做多包攔截就沒轍了)。

5、當然,最終,根本解決辦法是使用https,不過這個涉及到很多業務的修改,成本較高。如果劫持比例小,也許通過適當的補救做法會更好。

來看看檢測到的劫持情況:

總體1500萬pv的業務,一天竟然有100萬的劫持上報,即使排除一半的誤報,也代表說20個使用者中,就接近有1個使用者出現被劫持的情況。

可見,各種小運營商(尤其是移動)的心是有多黑!膽子是有多大!

各種劫持的手段都有:

1、直接返回乙個帶廣告的html;

2、在原html中插入js,再通過js指令碼安插廣告;

3、iframe展示原來正常網頁。

各種醜惡的嘴臉都被記錄在案:

HTTP劫持和DNS劫持 實際JS對抗

1 對於div注入的,可以初始化時檢查全部html 檢測是否被劫持比較簡單,但對抗就略麻煩,這個在說完第2點之後再解釋。2 對於js注入,可以在window監聽domnodeinserted事件。事件有srcelement,可以獲取到剛插入的dom節點。這裡開始簡單粗暴的做正則匹配,匹配所有url。...

HTTP劫持和DNS劫持 實際JS對抗

1 對於div注入的,可以初始化時檢查全部html 檢測是否被劫持比較簡單,但對抗就略麻煩,這個在說完第2點之後再解釋。2 對於js注入,可以在window監聽domnodeinserted事件。事件有srcelement,可以獲取到剛插入的dom節點。這裡開始簡單粗暴的做正則匹配,匹配所有url。...

DNS劫持 流量劫持,HTTP HTTPS劫持

dns劫持 dns劫持就是通過劫持了dns伺服器,通過某些手段取得某網域名稱的解析記錄控制權,進而修改此網域名稱的解析結果,導致對該網域名稱的訪問由原ip位址轉入到修改後的指定ip,其結果就是對特定的 不能訪問或訪問的是假 從而實現竊取資料或者破壞原有正常服務的目的。dns劫持通過篡改dns伺服器上...