本發(fā)明屬于計算機網(wǎng)絡技術領域,更具體地,涉及一種安卓混合應用的細粒度訪問控制方法。
背景技術:
安卓(Android)混合應用是使用Web技術和Java語言混合編寫開發(fā)的移動應用;Android混合應用與Android原生應用相比,采用Web技術開發(fā)的混合應用的新特性帶來了原生應用中并不存在的安全問題,尤其是混合應用需要從網(wǎng)絡中加載內容和執(zhí)行網(wǎng)絡代碼,并且混合應用核心組件WebView提供了addJavaScriptInterface等接口將對設備資源的訪問能力暴露給了從網(wǎng)絡中加載的可信度未知的JavaScript代碼,使得用戶設備上的資源信息和隱私數(shù)據(jù)可能被惡意攻擊者竊取,帶來安全隱患。
為解決Android混合應用中加載的網(wǎng)絡代碼訪問系統(tǒng)資源可能帶來的安全問題,國內外的研究人員已經進行了一些探索與研究。目前的Android系統(tǒng)對權限的授予范圍是整個應用程序,只要應用程序申請了某一權限,則應用中的任何代碼都可以訪問與該權限對應的系統(tǒng)資源。對于Android原生應用,應用代碼都是本地端的Java代碼,這些代碼的可信程度是一致的,Android系統(tǒng)提供的權限機制可以有效的控制應用代碼對設備資源訪問;但在擴展到混合應用后,由于混合應用中實現(xiàn)業(yè)務邏輯的代碼主要由Web技術實現(xiàn),需要加載不同源的網(wǎng)絡內容,而這些網(wǎng)絡內容中包含的代碼的可信程度是有區(qū)別的,此時Android系統(tǒng)提供的權限機制就不能很好的控制這些網(wǎng)絡代碼對系統(tǒng)資源的訪問了。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框架來保證混合應用中未授權的網(wǎng)絡源中的Web內容不能訪問設備資源,保證混合應用中可以自由加載來自不同網(wǎng)絡域的Web頁面,通過設置白名單來限制不同源的網(wǎng)絡內容是否能訪問系統(tǒng)資源;NoFrak框架在一定程度上起到了保護系統(tǒng)資源不被惡意網(wǎng)絡代碼訪問的作用,但是它控制粒度比較粗糙,不能滿足不同網(wǎng)絡域的網(wǎng)絡內容訪問不同系統(tǒng)資源的要求,同時其訪問控制策略采用開發(fā)者靜態(tài)配置的方式,缺乏靈活性,用戶無法根據(jù)自己的需求配置訪問控制策略。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系統(tǒng)和Webkit引擎,通過修改HTML元素標簽的屬性,設置其訪問系統(tǒng)資源的能力,在應用運行時,Webkit解析引擎解析HTML頁面,獲取頁面元素的訪問權限并結合應用本身申請的權限來得到其實際的訪問控制權限,從而進行訪問控制,這種方式需要修改Android系統(tǒng)本身,且需要開發(fā)者對HTML中的各個元素設置訪問權限,過程比較復雜,在實用性方面存在一定的問題。
綜上所述,當前對于Andorid混合應用中如何保護系統(tǒng)資源不被非可信的網(wǎng)絡內容訪問的相關研究還不夠系統(tǒng)和深入,現(xiàn)有的解決方案能在一定程度上解決混合應用中非可信網(wǎng)絡代碼訪問系統(tǒng)資源所造成的安全問題,但從實施的角度來看,現(xiàn)有技術在訪問控制粒度和靈活性上均存在不足,且需要修改Android系統(tǒng)本身,兼容性較差,不易于實施。
技術實現(xiàn)要素:
針對現(xiàn)有技術的以上缺陷或改進需求,本發(fā)明提供了一種安卓混合應用的細粒度訪問控制方法,在無需對Android系統(tǒng)本身和Web頁面進行修改的情況下,將Android混合應用對設備系統(tǒng)資源訪問權限的分配細化到針對Android混合應用中加載的不同的網(wǎng)絡域,以克服Android系統(tǒng)無法精細控制Android混合應用中網(wǎng)絡代碼對系統(tǒng)資源的訪問而引發(fā)的安全問題。
為實現(xiàn)上述目的,按照本發(fā)明的一個方面,提供了一種安卓混合應用的細粒度訪問控制方法,包括如下步驟:
(1)對安卓混合應用中可能加載的各類的網(wǎng)絡域配置訪問控制策略;
(2)通過解析開發(fā)者預先定義策略配置文件,或者通過用戶動態(tài)配置來獲取所運行的安卓混合應用的訪問控制策略;
(3)在安卓混合應用的運行中,當安卓混合應用的WebView中加載的網(wǎng)絡頁面中的代碼需要訪問系統(tǒng)資源時,通過截取訪問請求對插件管理模塊(Plugin Manager)的調用鏈,獲取發(fā)起訪問請求的來源和擬訪問的插件信息,并將這些相關信息進行封裝;
(4)據(jù)訪問請求的來源、擬訪問的插件的信息,查詢訪問控制策略庫,根據(jù)訪問控制策略判斷是否允許該訪問請求;
(5)插件管理模塊根據(jù)判斷的結果進行處理;若允許該訪問,則調用擬訪問插件的具體響應函數(shù)處理該訪問請求,若拒絕該訪問,則結束。
優(yōu)選地,上述安卓混合應用的細粒度訪問控制方法,其步驟(1)包括如下子步驟:
(1)根據(jù)安卓混合應用開發(fā)框架的命令行工具創(chuàng)建安卓混合應用;
(1.2)在應安卓混合應用的assets/www目錄中實現(xiàn)完成應用邏輯功能的各HTML、CSS和js文件;
(1.3)配置應用的Manifest.xml文件res/xml/config.xml文件來指定應用申請的權限和使用的插件;
(1.4)配置應用的res/xml/permission.xml文件來指定應用中需要加載的各網(wǎng)絡域對各插件的訪問控制策略。
優(yōu)選地,上述安卓混合應用的細粒度訪問控制方法,其步驟(2)具體包括以下子步驟:
(2.1)由權限管理模塊(Permission Manager)獲取開發(fā)者預先定義的策略配置文件并對其進行解析;
(2.2)根據(jù)解析獲得的訪問控制主體、客體和動作相關信息構建訪問控制策略集合;
(2.3)由用戶根據(jù)應用需求對上述問控制策略集合進行增加、刪除或修改,來更新訪問控制策略集合。
優(yōu)選地,上述安卓混合應用的細粒度訪問控制方法,其步驟(3)具體包括以下子步驟:
(3.1)當安卓混合應用的WebView中加載的Web頁面擬訪問系統(tǒng)資源時,通過JavaScript代碼調用相關插件的js文件中提供的函數(shù);
(3.2)所述插件的js文件中的處理函數(shù)將相關的訪問請求的參數(shù)進行封裝,采用安卓混合應用開發(fā)框架提供的接口方法進行統(tǒng)一處理;
(3.3)通過在初始化過程將安卓混合應用綁定到安卓混合應用WebView的橋接接口,將網(wǎng)絡頁面中對系統(tǒng)資源的訪問請求傳遞給Java層;
(3.4)由插件管理模塊根據(jù)訪問請求的參數(shù),查找對應的插件對象;若存在插件對象,則將訪問請求的來源和擬訪問的插件信息進行封裝,形成訪問請求信息后發(fā)送給權限管理模塊(PermissionManager);若不存在插件對象,則結束本次訪問。
優(yōu)選地,上述安卓混合應用的細粒度訪問控制方法,其步驟(4)具體包括以下子步驟:
(4.1)權限管理模塊對訪問請求信息進行解析,獲取訪問請求的主體和客體信息,即發(fā)起訪問請求的網(wǎng)絡域和擬訪問的插件;
(4.2)根據(jù)訪問請求的主體和客體信息查詢訪問控制策略集合,判斷相應的訪問控制策略是否存在;若是,則根據(jù)策略判斷是否允許訪問請求,若否,則根據(jù)默認的策略進行判斷。
優(yōu)選地,上述安卓混合應用的細粒度訪問控制方法,其步驟(5)具體包括以下子步驟:
(5.1)若步驟(4)的判斷結果為允許訪問,則調用訪問請求對應的插件來訪問系統(tǒng)資源;若判斷結果為拒絕訪問,則結束本次訪問;若判斷結果為詢問用戶,則進入步驟(5.2);
(5.2)若用戶選擇允許訪問,則訪問請求對的插件來訪問系統(tǒng)資源,若用戶選擇拒絕訪問,則結束本次訪問。
總體而言,通過本發(fā)明所構思的以上技術方案與現(xiàn)有技術相比,能夠取得下列有益效果:
(1)本發(fā)明提供的安卓混合應用的細粒度訪問控制方法,實現(xiàn)了細粒度的訪問控制;在訪問控制中根據(jù)預先定義的訪問控制策略來判定訪問請求是否被允許,而訪問控制策略的制定是基于安卓混合應用中可能加載的不同網(wǎng)絡域、對不同的網(wǎng)絡域配置不同的插件訪問控制策略,避免了對不同網(wǎng)絡域訪問系統(tǒng)資源的訪問控制一刀切的管理方法;
(2)本發(fā)明提供的安卓混合應用的細粒度訪問控制方法,訪問控制更加靈活;各網(wǎng)絡域對各插件的訪問控制策略可以預先配置,并且可以根據(jù)開發(fā)或應用的需求由開發(fā)者自行更新,使得訪問控制更加靈活;
(3)本發(fā)明提供的安卓混合應用的細粒度訪問控制方法,兼容原生Android系統(tǒng)和Web應用,由于在本發(fā)明的方法中,不涉及對Android系統(tǒng)的修改,使用本發(fā)明所述的方法,安卓混合應用可以在原生Android系統(tǒng)下實施細粒度訪問控制。
附圖說明
圖1是本發(fā)明實施例的整體架構圖;
圖2為本發(fā)明實施例所提供的安卓混合應用的細粒度訪問控制方法的流程示意圖;
圖3為本發(fā)明實施例所提供的安卓混合應用的細粒度訪問控制方法的步驟1的細化流程圖;
圖4為本發(fā)明實施例所提供的安卓混合應用的細粒度訪問控制方法的步驟2的細化流程圖;
圖5為本發(fā)明實施例所提供的安卓混合應用的細粒度訪問控制方法的步驟3的細化流程圖;
圖6為本發(fā)明實施例所提供的安卓混合應用的細粒度訪問控制方法的步驟4的細化流程圖;
圖7為本發(fā)明實施例所提供的安卓混合應用的細粒度訪問控制方法的步驟5的細化流程圖。
具體實施方式
為了使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,以下結合附圖及實施例,對本發(fā)明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個實施方式中所涉及到的技術特征只要彼此之間未構成沖突就可以相互組合。
以下首先就本發(fā)明的技術術語進行解釋和說明:
Android:由Google主導開發(fā)的基于Linux內核的移動操作系統(tǒng),以其開放的特性在移動操作系統(tǒng)市場上擁有較高的占有率;
Android應用:運行在Android系統(tǒng)中的應用程序,主要由Java語言開發(fā);
Android混合應用:使用HTML5、CSS、JavaScript等Web技術和Java語言混合編寫開發(fā)的移動應用,與原生應用不同,Android混合應用主要由兩部分構成,一部分是由本地Java代碼實現(xiàn)的中間框架層,實現(xiàn)應用與系統(tǒng)之間的交互,獲取系統(tǒng)資源;另一部分由WebView組件構成,WebView可以視為一個嵌入式的瀏覽器,用來加載Web頁面和處理JavaScript代碼;
WebView:混合應用的核心組件,WebView組件是View組件的一個子類,主要用于展示W(wǎng)eb頁面,使用WebView,Android應用相當于嵌入了一個功能強大的瀏覽器,可以完成相關渲染W(wǎng)eb內容和處理JavaScript代碼等操作;相較于瀏覽器應用,WebView組件還提供了多種Web頁面中JavaScript和本地Java對象的通信機制,將訪問設備的能力暴露給WebView中加載的網(wǎng)絡內容,使之獲得訪問系統(tǒng)資源的能力;
混合應用開發(fā)框架:用來幫助開發(fā)者使用標準的Web技術來創(chuàng)建基于HTML-5的混合應用的命令行工具,主要包括框架部分和插件部分,框架部分主要作用是充當WebView中Web內容和插件模塊進行交互的橋梁;而插件部分則是負責實際地對設備資源進行操作。針對每一種設備資源,如電話功能、通訊錄、攝像頭、短信、WiFi和NFC等,開發(fā)框架都提供相應的一種或多種插件,以PhoneGap開發(fā)框架為例,目前,PhoneGap官方提供16種內置的插件供開發(fā)者直接使用,開發(fā)者可以根據(jù)自己的功能需求選擇添加相應的插件。另外,混合應用中間件開發(fā)框架還允許開發(fā)者自定義插件,如果開發(fā)者需要的功能內置插件并沒有提供,開發(fā)者可以按照插件開發(fā)規(guī)定開發(fā)自定義的插件或使用第三方插件;
網(wǎng)絡域:混合應用中加載的網(wǎng)絡頁面來自的URL所屬的域。
本發(fā)明所提出的全新的基于PhoneGap開發(fā)框架的Android混合應用細粒度訪問控制方法,其目的是在不修改Android系統(tǒng)本身和Web應用的情況下對混合應用中加載的來自不同網(wǎng)絡域的網(wǎng)絡頁面對系統(tǒng)資源的訪問操作進行細粒度的控制;以下結合實施例和附圖對本發(fā)明所提供的細粒度訪問控制方法做進一步說明。
實施例中以PhoneGap框架為例,對如何通過改造混合應用中間件開發(fā)框架實現(xiàn)對安卓混合應用的細粒度訪問控制進行詳細說明。
圖1示意了基于PhoneGap開發(fā)框架的Android混合應用細粒度訪問控制框架的整體架構,其中的圓角矩形表示經過修改的框架模塊;本發(fā)明的訪問控制方法主要的工作主要集中在以下兩個部分:首先,在涉及JavaScript代碼調用插件提供的訪問系統(tǒng)資源的API處進行訪問請求的獲取,即修改Plugin Manager模塊來獲取對插件調用的訪問請求;其次,通過增加Permission Manager模塊來存儲應用開發(fā)者和用戶配置的訪問控制策略,在訪問請求發(fā)起后,通過查詢訪問控制策略來判斷是否允許訪問請求的執(zhí)行,并將結果返回給Plugin Manager模塊。
圖2示意了實施例提供的針對Android混合應用的細粒度訪問控制方法的流程,具體包括以下步驟:
步驟1.應用開發(fā)者使用拓展后的PhoneGap框架開發(fā)Android混合應用,并根據(jù)實際情況對混合應用中可能加載的不同的網(wǎng)絡域配置訪問控制策略;
步驟2.在混合應用的運行中,由權限管理模塊(Permission Manager)通過讀取解析應用開發(fā)者預先定義策略配置文件,或者通過用戶動態(tài)配置來獲取相應的訪問控制策略;
步驟3.在混合應用的運行中,當其WebView中加載的網(wǎng)絡頁面中的代碼需要訪問系統(tǒng)資源時,截取其對插件管理模塊(Plugin Manager)的調用鏈,獲取發(fā)起訪問請求的網(wǎng)絡域和需要訪問的插件等信息,并這些相關信息進行封裝,傳遞給PermissionManager進行處理;
步驟4.PermissionManager根據(jù)訪問請求的來源、需要訪問的插件的名稱等信息,查詢訪問控制策略庫,根據(jù)訪問控制策略進行判斷是否允許該訪問,并將結果返回給Plugin Manager;;
步驟5.插件管理模塊根據(jù)判斷的結果進行處理;若允許該訪問,則調用擬訪問插件的具體響應函數(shù)處理該訪問請求,若拒絕該訪問,則結束。
實施例中,步驟1的流程如圖3所示,包括以下子步驟:
1.1應用開發(fā)者使用PhoneGap命令行工具創(chuàng)建混合應用;
1.2在應用的在應用的assets/www目錄中實現(xiàn)完成應用邏輯功能的各HTML、CSS和js文件;
1.3配置應用的Manifest.xml文件res/xml/config.xml文件來指定應用申請的權限和使用的PhoneGap插件;
實施例中,假設應用開發(fā)者在應用中使用了Device、Camera和Geolocation插件;
并申請了查詢設備狀態(tài)權限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文件來指定應用中需要加載的不同網(wǎng)絡域對不同插件的訪問控制策略;實施例中,應用開發(fā)者訪問策略配置示例如下:
實施例中,步驟2的流程如圖4所示,包括以下子步驟:
2.1權限管理模塊(Permission Manager)讀取開發(fā)者預先定義的策略配置文件,并對之進行解析;在本例中,就是對步驟(1.4)所定義的上述策略進行解析;
2.2根據(jù)解析得到的訪問控制主體、客體和動作等相關信息構建訪問控制策略集合;
2.3用戶點擊訪問控制策略設置按鈕時,調出訪問控制策略設置界面,將當前訪問控制策略集合中的策略展示給用戶;
2.4用戶根據(jù)自己的需要對訪問控制策略進行相應的增加、刪除和修改,當用戶點擊保存按鈕后,更新訪問控制策略集合。
實施例中,步驟3的流程如圖5所示,包括以下子步驟:
3.1混合應用WebView中加載的Web頁面在需要訪問系統(tǒng)資源時,通過JavaScript代碼調用相關插件的js文件中提供的函數(shù);
不失一般性,假設HTML頁面"http://*.a.com"中存在拍照按鈕,當點擊按鈕時,按鈕的響應函數(shù)capturePhoto()被調用,capturePhoto()方法中調用Camera.js文件中提供的處理函數(shù)camera.getPicture();
3.2插件的js文件中的處理函數(shù)將相關的訪問請求的參數(shù)進行封裝,調用PhoneGap框架提供的cordova.js文件提供的androidExec()方法進行統(tǒng)一處理;
在本例中,Camera.js文件中的camera.getPicture()方法設置successCallback,errorCallback和其他相關參數(shù),調用cordova.js文件中提供的androidExec()方法;
3.3通過應用在初始化過程SystemWebViewEngine模塊提供給混合應用WebView的橋接接口SystemExposedJsApi對象,cordova.js中的androidExec()方法將網(wǎng)絡頁面中對系統(tǒng)資源的訪問請求發(fā)送給SystemExposedJsApi對象,調用它的exec()方法來處理訪問請求;
3.4 SystemWebViewEngine對象的exec()方法調用其成員變量CordovaBridge對象的jsExec()方法;
3.5 CordovaBridge對象進一步將訪問請求交由其成員變量PluginManager進行處理;
3.6 PluginManager對象根據(jù)訪問請求的相關參數(shù),查找對應插件對象,若存在相應的插件,則將訪問請求的來源域和插件相關信息進行封裝,傳遞給PermissionManager進行處理,否則,直接返回;
在本實施例中,訪問請求需要訪問Camera插件,應用中對此插件進行了申明,則PluginManager將訪問請求的來源域和插件相關信息進行封裝,傳遞給PermissionManager進行處理。
實施例中,步驟4的流程如圖6所示,包括以下子步驟:
4.1PermissionManager解析傳遞過來的訪問請求信息,獲取訪問請求的主體和客體,即發(fā)起訪問請求的網(wǎng)絡域和需要訪問的插件;
在本實施例中,訪問請求的主體是"http://*.a.com",訪問請求的客體是Camera插件;
4.2根據(jù)訪問請求的主體和客體信息查詢訪問控制策略集合,判斷相應的訪問控制策略是否存在,若存在,則根據(jù)策略判斷是否允許訪問請求,若不存在,則根據(jù)默認的策略進行判斷;
在本實施例中,相應的訪問控制策略存在,即<access origin="http://*.a.com"plugin="Device"action="allow"/>,則Permission Manager返回允許訪問的結果;
4.3將判斷的結果返回給插件管理模塊;實施例中,步驟5的流程如圖7所示,包括以下子步驟進:
5.1插件管理模塊獲取PermissionManager對象返回的訪問控制判斷結果;
5.2若判斷結果為允許訪問,則調用相應的插件訪問系統(tǒng)資源,若判斷結果為拒絕訪問,則直接返回,若判斷結果為詢問用戶,則進入步驟5.3;
在本例中,返回的訪問控制結果為允許訪問,則PluginManager對象調用相應的Camera插件來處理訪問請求,并將結果返回;
5.3通過對話框來詢問用戶是否允許訪問請求執(zhí)行,若用戶選擇允許訪問,則調用相應的插件訪問系統(tǒng)資源,若用戶選擇拒絕訪問,則結束本次訪問。
本領域的技術人員容易理解,以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內所作的任何修改、等同替換和改進等,均應包含在本發(fā)明的保護范圍之內。