本发明属于计算机网络技术领域,更具体地,涉及一种安卓混合应用的细粒度访问控制方法。
背景技术:
安卓(Android)混合应用是使用Web技术和Java语言混合编写开发的移动应用;Android混合应用与Android原生应用相比,采用Web技术开发的混合应用的新特性带来了原生应用中并不存在的安全问题,尤其是混合应用需要从网络中加载内容和执行网络代码,并且混合应用核心组件WebView提供了addJavaScriptInterface等接口将对设备资源的访问能力暴露给了从网络中加载的可信度未知的JavaScript代码,使得用户设备上的资源信息和隐私数据可能被恶意攻击者窃取,带来安全隐患。
为解决Android混合应用中加载的网络代码访问系统资源可能带来的安全问题,国内外的研究人员已经进行了一些探索与研究。目前的Android系统对权限的授予范围是整个应用程序,只要应用程序申请了某一权限,则应用中的任何代码都可以访问与该权限对应的系统资源。对于Android原生应用,应用代码都是本地端的Java代码,这些代码的可信程度是一致的,Android系统提供的权限机制可以有效的控制应用代码对设备资源访问;但在扩展到混合应用后,由于混合应用中实现业务逻辑的代码主要由Web技术实现,需要加载不同源的网络内容,而这些网络内容中包含的代码的可信程度是有区别的,此时Android系统提供的权限机制就不能很好的控制这些网络代码对系统资源的访问了。Georgiev M等人(Georgiev M,Jana S,Shmatikov V.Breaking and fixing origin-based access control in hybrid web mobile application frameworks.NDSS symposium.NIH Public Access,2014,San Diego,California,2014:1)采用NoFrak框架来保证混合应用中未授权的网络源中的Web内容不能访问设备资源,保证混合应用中可以自由加载来自不同网络域的Web页面,通过设置白名单来限制不同源的网络内容是否能访问系统资源;NoFrak框架在一定程度上起到了保护系统资源不被恶意网络代码访问的作用,但是它控制粒度比较粗糙,不能满足不同网络域的网络内容访问不同系统资源的要求,同时其访问控制策略采用开发者静态配置的方式,缺乏灵活性,用户无法根据自己的需求配置访问控制策略。Luo等人(Jin X,Wang L,Luo T,et al.Fine-grained access control for html5-based mobile applications in android.Information Security.Springer International Publishing,2015:309-318)提出了一种针对混合应用中加载的Web内容的访问控制机制,通过修改Android系统和Webkit引擎,通过修改HTML元素标签的属性,设置其访问系统资源的能力,在应用运行时,Webkit解析引擎解析HTML页面,获取页面元素的访问权限并结合应用本身申请的权限来得到其实际的访问控制权限,从而进行访问控制,这种方式需要修改Android系统本身,且需要开发者对HTML中的各个元素设置访问权限,过程比较复杂,在实用性方面存在一定的问题。
综上所述,当前对于Andorid混合应用中如何保护系统资源不被非可信的网络内容访问的相关研究还不够系统和深入,现有的解决方案能在一定程度上解决混合应用中非可信网络代码访问系统资源所造成的安全问题,但从实施的角度来看,现有技术在访问控制粒度和灵活性上均存在不足,且需要修改Android系统本身,兼容性较差,不易于实施。
技术实现要素:
针对现有技术的以上缺陷或改进需求,本发明提供了一种安卓混合应用的细粒度访问控制方法,在无需对Android系统本身和Web页面进行修改的情况下,将Android混合应用对设备系统资源访问权限的分配细化到针对Android混合应用中加载的不同的网络域,以克服Android系统无法精细控制Android混合应用中网络代码对系统资源的访问而引发的安全问题。
为实现上述目的,按照本发明的一个方面,提供了一种安卓混合应用的细粒度访问控制方法,包括如下步骤:
(1)对安卓混合应用中可能加载的各类的网络域配置访问控制策略;
(2)通过解析开发者预先定义策略配置文件,或者通过用户动态配置来获取所运行的安卓混合应用的访问控制策略;
(3)在安卓混合应用的运行中,当安卓混合应用的WebView中加载的网络页面中的代码需要访问系统资源时,通过截取访问请求对插件管理模块(Plugin Manager)的调用链,获取发起访问请求的来源和拟访问的插件信息,并将这些相关信息进行封装;
(4)据访问请求的来源、拟访问的插件的信息,查询访问控制策略库,根据访问控制策略判断是否允许该访问请求;
(5)插件管理模块根据判断的结果进行处理;若允许该访问,则调用拟访问插件的具体响应函数处理该访问请求,若拒绝该访问,则结束。
优选地,上述安卓混合应用的细粒度访问控制方法,其步骤(1)包括如下子步骤:
(1)根据安卓混合应用开发框架的命令行工具创建安卓混合应用;
(1.2)在应安卓混合应用的assets/www目录中实现完成应用逻辑功能的各HTML、CSS和js文件;
(1.3)配置应用的Manifest.xml文件res/xml/config.xml文件来指定应用申请的权限和使用的插件;
(1.4)配置应用的res/xml/permission.xml文件来指定应用中需要加载的各网络域对各插件的访问控制策略。
优选地,上述安卓混合应用的细粒度访问控制方法,其步骤(2)具体包括以下子步骤:
(2.1)由权限管理模块(Permission Manager)获取开发者预先定义的策略配置文件并对其进行解析;
(2.2)根据解析获得的访问控制主体、客体和动作相关信息构建访问控制策略集合;
(2.3)由用户根据应用需求对上述问控制策略集合进行增加、删除或修改,来更新访问控制策略集合。
优选地,上述安卓混合应用的细粒度访问控制方法,其步骤(3)具体包括以下子步骤:
(3.1)当安卓混合应用的WebView中加载的Web页面拟访问系统资源时,通过JavaScript代码调用相关插件的js文件中提供的函数;
(3.2)所述插件的js文件中的处理函数将相关的访问请求的参数进行封装,采用安卓混合应用开发框架提供的接口方法进行统一处理;
(3.3)通过在初始化过程将安卓混合应用绑定到安卓混合应用WebView的桥接接口,将网络页面中对系统资源的访问请求传递给Java层;
(3.4)由插件管理模块根据访问请求的参数,查找对应的插件对象;若存在插件对象,则将访问请求的来源和拟访问的插件信息进行封装,形成访问请求信息后发送给权限管理模块(PermissionManager);若不存在插件对象,则结束本次访问。
优选地,上述安卓混合应用的细粒度访问控制方法,其步骤(4)具体包括以下子步骤:
(4.1)权限管理模块对访问请求信息进行解析,获取访问请求的主体和客体信息,即发起访问请求的网络域和拟访问的插件;
(4.2)根据访问请求的主体和客体信息查询访问控制策略集合,判断相应的访问控制策略是否存在;若是,则根据策略判断是否允许访问请求,若否,则根据默认的策略进行判断。
优选地,上述安卓混合应用的细粒度访问控制方法,其步骤(5)具体包括以下子步骤:
(5.1)若步骤(4)的判断结果为允许访问,则调用访问请求对应的插件来访问系统资源;若判断结果为拒绝访问,则结束本次访问;若判断结果为询问用户,则进入步骤(5.2);
(5.2)若用户选择允许访问,则访问请求对的插件来访问系统资源,若用户选择拒绝访问,则结束本次访问。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:
(1)本发明提供的安卓混合应用的细粒度访问控制方法,实现了细粒度的访问控制;在访问控制中根据预先定义的访问控制策略来判定访问请求是否被允许,而访问控制策略的制定是基于安卓混合应用中可能加载的不同网络域、对不同的网络域配置不同的插件访问控制策略,避免了对不同网络域访问系统资源的访问控制一刀切的管理方法;
(2)本发明提供的安卓混合应用的细粒度访问控制方法,访问控制更加灵活;各网络域对各插件的访问控制策略可以预先配置,并且可以根据开发或应用的需求由开发者自行更新,使得访问控制更加灵活;
(3)本发明提供的安卓混合应用的细粒度访问控制方法,兼容原生Android系统和Web应用,由于在本发明的方法中,不涉及对Android系统的修改,使用本发明所述的方法,安卓混合应用可以在原生Android系统下实施细粒度访问控制。
附图说明
图1是本发明实施例的整体架构图;
图2为本发明实施例所提供的安卓混合应用的细粒度访问控制方法的流程示意图;
图3为本发明实施例所提供的安卓混合应用的细粒度访问控制方法的步骤1的细化流程图;
图4为本发明实施例所提供的安卓混合应用的细粒度访问控制方法的步骤2的细化流程图;
图5为本发明实施例所提供的安卓混合应用的细粒度访问控制方法的步骤3的细化流程图;
图6为本发明实施例所提供的安卓混合应用的细粒度访问控制方法的步骤4的细化流程图;
图7为本发明实施例所提供的安卓混合应用的细粒度访问控制方法的步骤5的细化流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
以下首先就本发明的技术术语进行解释和说明:
Android:由Google主导开发的基于Linux内核的移动操作系统,以其开放的特性在移动操作系统市场上拥有较高的占有率;
Android应用:运行在Android系统中的应用程序,主要由Java语言开发;
Android混合应用:使用HTML5、CSS、JavaScript等Web技术和Java语言混合编写开发的移动应用,与原生应用不同,Android混合应用主要由两部分构成,一部分是由本地Java代码实现的中间框架层,实现应用与系统之间的交互,获取系统资源;另一部分由WebView组件构成,WebView可以视为一个嵌入式的浏览器,用来加载Web页面和处理JavaScript代码;
WebView:混合应用的核心组件,WebView组件是View组件的一个子类,主要用于展示Web页面,使用WebView,Android应用相当于嵌入了一个功能强大的浏览器,可以完成相关渲染Web内容和处理JavaScript代码等操作;相较于浏览器应用,WebView组件还提供了多种Web页面中JavaScript和本地Java对象的通信机制,将访问设备的能力暴露给WebView中加载的网络内容,使之获得访问系统资源的能力;
混合应用开发框架:用来帮助开发者使用标准的Web技术来创建基于HTML-5的混合应用的命令行工具,主要包括框架部分和插件部分,框架部分主要作用是充当WebView中Web内容和插件模块进行交互的桥梁;而插件部分则是负责实际地对设备资源进行操作。针对每一种设备资源,如电话功能、通讯录、摄像头、短信、WiFi和NFC等,开发框架都提供相应的一种或多种插件,以PhoneGap开发框架为例,目前,PhoneGap官方提供16种内置的插件供开发者直接使用,开发者可以根据自己的功能需求选择添加相应的插件。另外,混合应用中间件开发框架还允许开发者自定义插件,如果开发者需要的功能内置插件并没有提供,开发者可以按照插件开发规定开发自定义的插件或使用第三方插件;
网络域:混合应用中加载的网络页面来自的URL所属的域。
本发明所提出的全新的基于PhoneGap开发框架的Android混合应用细粒度访问控制方法,其目的是在不修改Android系统本身和Web应用的情况下对混合应用中加载的来自不同网络域的网络页面对系统资源的访问操作进行细粒度的控制;以下结合实施例和附图对本发明所提供的细粒度访问控制方法做进一步说明。
实施例中以PhoneGap框架为例,对如何通过改造混合应用中间件开发框架实现对安卓混合应用的细粒度访问控制进行详细说明。
图1示意了基于PhoneGap开发框架的Android混合应用细粒度访问控制框架的整体架构,其中的圆角矩形表示经过修改的框架模块;本发明的访问控制方法主要的工作主要集中在以下两个部分:首先,在涉及JavaScript代码调用插件提供的访问系统资源的API处进行访问请求的获取,即修改Plugin Manager模块来获取对插件调用的访问请求;其次,通过增加Permission Manager模块来存储应用开发者和用户配置的访问控制策略,在访问请求发起后,通过查询访问控制策略来判断是否允许访问请求的执行,并将结果返回给Plugin Manager模块。
图2示意了实施例提供的针对Android混合应用的细粒度访问控制方法的流程,具体包括以下步骤:
步骤1.应用开发者使用拓展后的PhoneGap框架开发Android混合应用,并根据实际情况对混合应用中可能加载的不同的网络域配置访问控制策略;
步骤2.在混合应用的运行中,由权限管理模块(Permission Manager)通过读取解析应用开发者预先定义策略配置文件,或者通过用户动态配置来获取相应的访问控制策略;
步骤3.在混合应用的运行中,当其WebView中加载的网络页面中的代码需要访问系统资源时,截取其对插件管理模块(Plugin Manager)的调用链,获取发起访问请求的网络域和需要访问的插件等信息,并这些相关信息进行封装,传递给PermissionManager进行处理;
步骤4.PermissionManager根据访问请求的来源、需要访问的插件的名称等信息,查询访问控制策略库,根据访问控制策略进行判断是否允许该访问,并将结果返回给Plugin Manager;;
步骤5.插件管理模块根据判断的结果进行处理;若允许该访问,则调用拟访问插件的具体响应函数处理该访问请求,若拒绝该访问,则结束。
实施例中,步骤1的流程如图3所示,包括以下子步骤:
1.1应用开发者使用PhoneGap命令行工具创建混合应用;
1.2在应用的在应用的assets/www目录中实现完成应用逻辑功能的各HTML、CSS和js文件;
1.3配置应用的Manifest.xml文件res/xml/config.xml文件来指定应用申请的权限和使用的PhoneGap插件;
实施例中,假设应用开发者在应用中使用了Device、Camera和Geolocation插件;
并申请了查询设备状态权限android.permission.READ_PHONE_STATE、使用摄像头权限android.permission.CAMERA、写文件权限android.permission.WRITE_EXTERNAL_STORAGE、使用位置相关权限android.permission.ACCESS_COARSE_LOCATION和android.permission.ACCESS_FINE_LOCATION;
1.4配置应用的res/xml/permission.xml文件来指定应用中需要加载的不同网络域对不同插件的访问控制策略;实施例中,应用开发者访问策略配置示例如下:
实施例中,步骤2的流程如图4所示,包括以下子步骤:
2.1权限管理模块(Permission Manager)读取开发者预先定义的策略配置文件,并对之进行解析;在本例中,就是对步骤(1.4)所定义的上述策略进行解析;
2.2根据解析得到的访问控制主体、客体和动作等相关信息构建访问控制策略集合;
2.3用户点击访问控制策略设置按钮时,调出访问控制策略设置界面,将当前访问控制策略集合中的策略展示给用户;
2.4用户根据自己的需要对访问控制策略进行相应的增加、删除和修改,当用户点击保存按钮后,更新访问控制策略集合。
实施例中,步骤3的流程如图5所示,包括以下子步骤:
3.1混合应用WebView中加载的Web页面在需要访问系统资源时,通过JavaScript代码调用相关插件的js文件中提供的函数;
不失一般性,假设HTML页面"http://*.a.com"中存在拍照按钮,当点击按钮时,按钮的响应函数capturePhoto()被调用,capturePhoto()方法中调用Camera.js文件中提供的处理函数camera.getPicture();
3.2插件的js文件中的处理函数将相关的访问请求的参数进行封装,调用PhoneGap框架提供的cordova.js文件提供的androidExec()方法进行统一处理;
在本例中,Camera.js文件中的camera.getPicture()方法设置successCallback,errorCallback和其他相关参数,调用cordova.js文件中提供的androidExec()方法;
3.3通过应用在初始化过程SystemWebViewEngine模块提供给混合应用WebView的桥接接口SystemExposedJsApi对象,cordova.js中的androidExec()方法将网络页面中对系统资源的访问请求发送给SystemExposedJsApi对象,调用它的exec()方法来处理访问请求;
3.4 SystemWebViewEngine对象的exec()方法调用其成员变量CordovaBridge对象的jsExec()方法;
3.5 CordovaBridge对象进一步将访问请求交由其成员变量PluginManager进行处理;
3.6 PluginManager对象根据访问请求的相关参数,查找对应插件对象,若存在相应的插件,则将访问请求的来源域和插件相关信息进行封装,传递给PermissionManager进行处理,否则,直接返回;
在本实施例中,访问请求需要访问Camera插件,应用中对此插件进行了申明,则PluginManager将访问请求的来源域和插件相关信息进行封装,传递给PermissionManager进行处理。
实施例中,步骤4的流程如图6所示,包括以下子步骤:
4.1PermissionManager解析传递过来的访问请求信息,获取访问请求的主体和客体,即发起访问请求的网络域和需要访问的插件;
在本实施例中,访问请求的主体是"http://*.a.com",访问请求的客体是Camera插件;
4.2根据访问请求的主体和客体信息查询访问控制策略集合,判断相应的访问控制策略是否存在,若存在,则根据策略判断是否允许访问请求,若不存在,则根据默认的策略进行判断;
在本实施例中,相应的访问控制策略存在,即<access origin="http://*.a.com"plugin="Device"action="allow"/>,则Permission Manager返回允许访问的结果;
4.3将判断的结果返回给插件管理模块;实施例中,步骤5的流程如图7所示,包括以下子步骤进:
5.1插件管理模块获取PermissionManager对象返回的访问控制判断结果;
5.2若判断结果为允许访问,则调用相应的插件访问系统资源,若判断结果为拒绝访问,则直接返回,若判断结果为询问用户,则进入步骤5.3;
在本例中,返回的访问控制结果为允许访问,则PluginManager对象调用相应的Camera插件来处理访问请求,并将结果返回;
5.3通过对话框来询问用户是否允许访问请求执行,若用户选择允许访问,则调用相应的插件访问系统资源,若用户选择拒绝访问,则结束本次访问。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。