關於iOS Webview 載入React 靜態資源的安全問題

asml發表於2018-07-19

前言

隨著專案採用hybrid 開發模式,基於單webview通過本地server載入react靜態資源。過程中遇到一些一下安全的問題。

工具

HTTP server:CocoaHTTPServer

問題

1.本地server埠被佔用。動態分配埠cookie 丟失。

通過NSHTTPCookieStorage 讀取本地cookie,並新增到request的header。

簡單介紹下NSHttpCookiesStorage是管理cookie的一個單例,每個Cookie都是一個NSHTTPCookie的例項,所有應用的cookies都被儲存在這個NSHTTPCookieStorage的單例中,並且跨程式同步。  在iOS中,cookie不會共享,只存在應用的沙盒中。

程式碼如下:

 NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];

        NSMutableDictionary *cookieDic = [NSMutableDictionary dictionary];
        NSMutableString *cookieValue = [NSMutableString stringWithFormat:@""];
        NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
        for (NSHTTPCookie *cookie in [cookieStorage cookiesForURL:[NSURL URLWithString:urlstr relativeToURL:[NSURL URLWithString:@"localhost"]]]) {
            [cookieDic setObject:cookie.value forKey:cookie.name];
        }
        
        // cookie去重複,
        for (NSString *key in cookieDic) {
            NSString *appendString = [NSString stringWithFormat:@"%@=%@;", key, [cookieDic valueForKey:key]];
            [cookieValue appendString:appendString];
        }
        [req addValue:cookieValue forHTTPHeaderField:@"Cookie"];

    [self.webview loadRequset:req];



複製程式碼

2.外部程式可以直接訪問APP本地server。本地server資料可以被抓包。

1.通過 摘要認證進行使用者名稱密碼驗證,可以使是外部程式無法通過驗證,從而無法訪問。

摘要認證( Digest authentication)是一個簡單的認證機制,最初是為HTTP協議開發的,因而也常叫做HTTP摘要,在RFC2617中描述。其身份驗證機制很簡單,它採用雜湊式(hash)加密方法,以避免用明文傳輸使用者的口令。 摘要認證就是要核實,參與通訊的雙方,都知道雙方共享的一個祕密(即口令)。

程式碼:

//digest 認證
    NSString  *_authorization = [NSString stringWithFormat:@"Digest username=\"asml\",uri=\"/\""];
    //basic 認證
//    NSString  *_authorization = [NSString stringWithFormat:@"Basic username=\"asml\",uri=\"/\""];
    [req setValue:_authorization forHTTPHeaderField:@"Authorization"];


複製程式碼

2.資料傳輸採用SSL/TLS 單向認證,APP內部校驗server證書。

官話說SSL是安全套接層(secure sockets layer),TLS是SSL的繼任者,叫傳輸層安全(transport layer security)。說白點,就是在明文的上層和TCP層之間加上一層加密,這樣就保證上層資訊傳輸的安全。如HTTP協議是明文傳輸,加上SSL層之後,就有了HTTPS.

程式碼:

關於iOS Webview 載入React 靜態資源的安全問題

本文暫時沒有demo,可以參考 CocoaHTTPServer


相關文章