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

前言

隨着項目採用hybrid 開發模式,基於單webview經過本地server加載react靜態資源。過程當中遇到一些一下安全的問題。react

工具

HTTP server:CocoaHTTPServergit

問題

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

經過NSHTTPCookieStorage 讀取本地cookie,並添加到request的header。github

簡單介紹下NSHttpCookiesStorage是管理cookie的一個單例,每一個Cookie都是一個NSHTTPCookie的實例,全部應用的cookies都被保存在這個NSHTTPCookieStorage的單例中,而且跨進程同步。  在iOS中,cookie不會共享,只存在應用的沙盒中。web

代碼以下:安全

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.經過 摘要認證進行用戶名密碼驗證,能夠使是外部進程沒法經過驗證,從而沒法訪問。cookie

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

代碼:socket

//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.
ui

代碼:


本文暫時沒有demo,能夠參考 CocoaHTTPServer

相關文章
相關標籤/搜索