关于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

相关文章
相关标签/搜索