HTML5頁面被運營商DNS劫持問題及解決方案,app中h5頁面原始碼的獲取
App應用的html5頁面經過運營商的行動網路(非wifi網路),被強制插入廣告和手機管家的多餘資訊,在有些場景嚴重干擾使用者的操作,也產生在美麗的頁面上加入了不協調的懸浮層。並且這個手機管家類的懸浮層有時間出現,有時間不出現,神出鬼沒,雖然你可以通過點選關閉手機手機關鍵是突然出現,有時候還關閉不了。總之使用者不喜歡這種使用者不需要的選擇,所以幹掉它吧!
在app中h5頁面原始碼,可以通過下面程式碼獲得,其中url就是h5頁面的原始碼,簡單吧!
分析app收到WebViewJavascriptBridge的頁面載入-(void)webViewDidFinishLoad:(UIWebView *)webView
{
NSString *url = [NSString stringWithContentsOfURL:webView.request.URL encoding: NSUTF8StringEncoding error:nil];
if (webView.canGoBack)
{
self.exitButton.hidden=NO;
}else
{
self.exitButton.hidden=YES;
}
}
通過分析,一個普通的頁面,經過Wi-Fi網路,webViewDidFinishLoad只響應一次就能顯示出頁面。
經過移動手機網路,需要經過三次webViewDidFinishLoad呼叫,並且三次的h5原始碼都相同。
基本上從app無法很好的解決方案,除非你的頁面只有一層,只讓它成功呼叫次。若你的應用有二級頁面很難控制了。
所以最終的解決方案是h5頁面。只需要你訪問的h5頁面採用的是https不是http就能很好的解決這個問題,完美的解決DNS劫持。當然https需要你購買證書或者伺服器自己做一個證書,具體https是後臺開發的問題我是外行。
2017年1月1日,蘋果商店禁止使用http的新應用上架,現在還允許包含http的應用上架,看來也沒有一棍子打死。https是比http安全的多,雖然也有破解方案,但是對於防一般人竊取資訊就夠了。軟體安全是相對的,防一般外行,不是防止一切”鑽家”(黑客)的。很多人都會感覺黑客都是寫軟體很好的人,其實並非都如此,很多隻對寫程式碼瞭解皮毛,能簡單寫程式碼利用軟體漏洞的人不在少數。
谷歌也將要拿http訪問的網站開刀了,見文章
WKWebView的h5頁面(js頁面)的原始碼獲取和UIWebView皆然不同,需要協議攔截,但造成js的post請求的引數被清空的嚴重問題,所以只能在測試時使用或不需要傳送帶引數的post請求的js頁面使用。具體參照文章《WKWebView採用HybridNSURLProtocol協議攔截圖片等資源預載入》。程式碼片段如下:
- (void)viewDidLoad {
[super viewDidLoad];
[self registerNSURLProtocolScheme];
}
- (void)registerNSURLProtocolScheme
{
[NSURLProtocol wk_registerScheme:@"https" ];
[NSURLProtocol wk_registerScheme:@"http"];
}
-(void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{
NSString *url = [NSString stringWithContentsOfURL:webView.URL encoding: NSUTF8StringEncoding error:nil];
NSLog(@"webView.URL:%@",url);
}