隨着項目採用hybrid 開發模式,基於單webview經過本地server加載react靜態資源。過程當中遇到一些一下安全的問題。react
HTTP server:CocoaHTTPServergit
經過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];
複製代碼
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