随着项目采用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