现在越来越多的iOS应用程序在进行系统设计时,采用了Hybrid混合架构模式,这种模式虽然带来了跨平台开发的优势,但是也带来了一些安全问题,本文针对这一问题展开研究,总结了目前iOS平台在使用
UIWebView 是iOS 平台上很重要的组件,它能够使移动应用内置一个浏览器,能够解析和展示服务器端的网页[1],是移动应用进行Hybrid 模式架构的一个基础组件,如著名的PhoneGap 框架就是native和网页之间的中间件, 它的实现原理就是基于UIWebView 组件。
现在有很多主流应用都采用这种Hybrid模式,如国外的Facebook,国内的百度搜索等。但目前来说,在使用UIWebView 组件的过程中也出现了一些安全性问题,如CVE-2013-6893 报出的猛犸浏览器iOS 版UXSS 漏洞[2],如乌云平台上报出的WooYun-2015-146717 Webview 拒绝服务漏洞[3],可见UIWebView 安全性问题还是很严重的。
本文首先简单介绍了UIWebView 的使用方法, 包括Javascript 代码和Objective-C 代码相互调用的过程,然后总结了目前在使用UIWebView 时存在的安全问题,并对每个漏洞进行详细的分析,最后分别对每种不同的漏洞提出了相应的解决方案,为开发者提供一份很详尽的安全开发指南。
2. UIWebView 简介 UIWebView 是iOS 开发中最常用的控件, 相当于在iOS App 中内置了一个浏览器, 它能使App 应用浏览网页,打开文件等操作,使iOS 应用和网络应用直接交互,使得两者紧密的结合在一起,这是一个跨平台的部署方案,开发一次既可以部署在iOS 平台又可以部署在Android 平台,而且更新升级会更加的容易,只要在服务端更新升级,客户端就可以实时的更新展示,不需要通过AppStore 的审核,大大缩短更新周期。下面来简单介绍一下UIWebView 的使用方法。
UIWebView 有关键的API: loadRequest:可以用来加载一个url 地址,它需要一个NSURLRequest 参数。
loadHTMLString:baseURL:这个方法用于直接加载html 代码,也可以用这个方法从本地html 读取代码,然后加载。
loadData:MIMEType:textEncodingName:baseURL:加载带有MIME 类型的数据,包含视频、图像、文本、音频、应用程序等数据。这个方法不常用,一般使用前两个方法。
goBack/goForward/stopLoading/reload。导航的几个方法,向前,向后,停止加载,重新加载等。
下述代码描述了在WebView 里加载google 网页的过程,如下图所示: UIWebView 的委托UIWebViewDelegate 主要有下面几个关键的委托API [4]: -(BOOL)webView:(UIWebView*)webViewshouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType