專利名稱:一種輕量級JavaScript沙箱的實現(xiàn)方法
技術領域:
本發(fā)明屬于軟件安全技術領域,涉及一種輕量級JavaScript沙箱的實現(xiàn)方法。
背景技術:
JavaScript語言是一種廣泛應用于互聯(lián)網(wǎng)應用程序的腳本語言,JavaScript語言具有很好的表達能力和靈活性,使用JavaScript語言可以提高軟件系統(tǒng)的靈活性和表達性,提高軟件系統(tǒng)的可讀性和可重用性。而函數(shù)(function)是JavaScript語言的基本結(jié)構(gòu),JavaScript程序系由一組函數(shù)組成,只有確保目標JavaScript函數(shù)安全和可靠的執(zhí)行,JavaScript程序才能夠被安全和可靠的執(zhí)行,不產(chǎn)生危險和惡意的程序行為。JavaScript語言支持運行時求解(runtime evaluation)語法特性,很多軟件系統(tǒng)(例如社交網(wǎng)絡)利用運行時求解支持用戶提供JavaScript代碼,由于缺乏有效的安全檢查機制,直接運行用戶提供的JavaScript代碼可能引入危險和惡意的程序行為,影響整個軟件系統(tǒng)的可靠性和安全性。目前解決JavaScript程序安全性和可靠性問題的一種方法是建立沙箱,讓可疑的JavaScript代碼在沙箱中運行,通過沙箱防止惡意的JavaScript程序代碼的執(zhí)行。然而,現(xiàn)有的JavaScript程序?qū)崿F(xiàn)一般較為復雜,一般需要擴展瀏覽器或者修改Web應用程序,甚至需要修改JavaScript的原有語法,程序員掌握和操作起來比較困難。故,實有必要進行研究,提供一種簡單有效,便于程序員的掌握和操作的輕量級JavaScript沙箱的實現(xiàn)方法。
發(fā)明內(nèi)容
為解決上述問題,本發(fā)明的目的在于提供一種簡單有效,便于程序員的掌握和操作的輕量級JavaScript沙箱的實現(xiàn)方法,確保JavaScript程序代碼在沙箱內(nèi)部安全執(zhí)行,不產(chǎn)生危險的程序行為。為實現(xiàn)上述目的,本發(fā)明的技術方案為—種輕量級JavaScript沙箱的實現(xiàn)方法,包括如下步驟SlO :定義沙箱內(nèi)部的訪問控制;Sll :根據(jù)所定義的訪問控制自動生成沙箱監(jiān)控代碼;S12 :根據(jù)所定義的訪問控制自動生成禁止訪問函數(shù)的監(jiān)控代碼;S13 :實時檢測沙箱內(nèi)部惡意代碼,阻止危險的函數(shù)調(diào)用。進一步地,所述步驟SlO具體包括SlOl :定義一個函數(shù)作為沙箱范圍,將可疑的JavaScript代碼封裝在這個特定的函數(shù)內(nèi)部,針對這個沙箱定義禁止訪問的函數(shù)集合;S102 :對一組訪問控制定義一個訪問控制對象數(shù)組,每一個數(shù)組元素對應一個訪問控制。進一步地,步驟S102中,每一個訪問控制包括有沙箱名稱和禁止訪問函數(shù)數(shù)組這兩個部分,沙箱名稱為沙箱入口函數(shù)名稱,禁止訪問函數(shù)數(shù)組的每一個元素是對應的沙箱內(nèi)部禁止訪問的一個函數(shù)名稱。進一步地,所述步驟Sll具體包括SllO :逐個訪問訪問控制對象數(shù)組,取出其中的訪問控制對象;Slll :根據(jù)訪問控制對象的沙箱名稱,生成入口函數(shù)的監(jiān)控代碼的字符串;S112 :根據(jù)步驟Slll中生成的字符串,使用jQuery AOP和JavaScript函數(shù)生成沙箱的監(jiān)控代碼。進一步地,所述步驟S12具體包括S120 :逐個訪問控制對象數(shù)組元素,取出其中的訪問控制對象;S121 :根據(jù)訪問控制對象的禁止訪問函數(shù)數(shù)組生成禁止訪問函數(shù)的監(jiān)控代碼的字符串;S121 :根據(jù)步驟S121生成的字符串,使用jQuery AOP和JavaScript函數(shù)生成禁止訪問函數(shù)的監(jiān)控代碼。進一步地,所述步驟S13具體包括。S130 :當沙箱入口函數(shù)被執(zhí)行時,系統(tǒng)進入口函數(shù)對應的沙箱;S131 :設置進入沙箱為系統(tǒng)的當前沙箱,系統(tǒng)的沙箱數(shù)量加I ;S132 :執(zhí)行沙箱內(nèi)部的程序代碼;·
S133 :如果沙箱內(nèi)部代碼執(zhí)行完成,則返回上一個沙箱,系統(tǒng)的沙箱數(shù)量減1,系統(tǒng)返回初始狀態(tài);S134:如果某個禁止訪問函數(shù)被執(zhí)行,則判斷該禁止訪問函數(shù)是否屬于當前的訪問控制,如果屬于當前的訪問控制,則執(zhí)行步驟S135 ;否則,返回步驟S132 ;S135 :發(fā)生危險程序行為時,阻止執(zhí)行相較于現(xiàn)有技術,本發(fā)明輕量級JavaScript沙箱的實現(xiàn)方法簡單有效,便于程序員的掌握和操作的輕量級JavaScript沙箱的實現(xiàn)方法,確保JavaScript程序代碼在沙箱內(nèi)部安全執(zhí)行,不產(chǎn)生危險的程序行為。
圖I是本發(fā)明的方法流程圖示。圖2是本發(fā)明生成沙箱的監(jiān)控代碼的流程圖示。圖3是本發(fā)明生成禁止訪問函數(shù)的監(jiān)控代碼的流程圖示。圖4是本發(fā)明運行時檢測沙箱內(nèi)部惡意代碼的流程圖示。
具體實施例方式為了使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。請參照圖I所示,本發(fā)明輕量級JavaScript沙箱的實現(xiàn)方法包括如下步驟SlO :定義沙箱內(nèi)部的訪問控制,具體包括如下步驟SlOl :定義一個函數(shù)作為沙箱范圍,將可疑的JavaScript代碼封裝在這個特定的函數(shù)內(nèi)部,針對這個沙箱定義禁止訪問的函數(shù)集合,這些JavaScript函數(shù)的執(zhí)行可能引起危險的程序行為;禁止訪問的函數(shù)集合如下表所示
沙箱__禁止氣問集合 _
沙~箱I 禁止函數(shù)11 禁止函數(shù)12 ...__禁止函數(shù)Im沙箱2禁止函數(shù)21 禁止函數(shù)22 ...__禁止函數(shù)2ιι
沙箱k禁止函數(shù)kl 禁止函數(shù)k2 ...禁止函數(shù)kp一S102 :對一組訪問控制定義一個訪問控制對象數(shù)組,每一個數(shù)組元素對應一個訪問控制。其中,每一個訪問控制包括有沙箱名稱和禁止訪問函數(shù)數(shù)組這兩個部分,沙箱名稱為沙箱入口函數(shù)名稱,禁止訪問函數(shù)數(shù)組的每一個元素是對應的沙箱內(nèi)部禁止訪問的一個函數(shù)名稱。 Sll :根據(jù)所定義的訪問控制自動生成沙箱監(jiān)控代碼,請參照圖2所示,具體包括如下步驟SllO :逐個訪問訪問控制對象數(shù)組,取出其中的訪問控制對象;Slll :根據(jù)訪問控制對象的入口函數(shù)名稱定義沙箱名稱,生成入口函數(shù)的監(jiān)控代碼的字符串;S112 :根據(jù)步驟Slll中生成的字符串,使用jQuery AOPCJQuery的面向方面編程擴展)和JavaScript函數(shù)eval O生成沙箱的監(jiān)控代碼。S12 :根據(jù)所定義的訪問控制自動生成禁止訪問函數(shù)的監(jiān)控代碼,請參照圖3所示,具體包括如下步驟S120 :逐個訪問控制對象數(shù)組元素,取出其中的訪問控制對象;S121 :根據(jù)訪問控制對象的禁止訪問函數(shù)數(shù)組生成禁止訪問函數(shù)的監(jiān)控代碼的字符串;S121 :根據(jù)步驟S121生成的字符串,使用jQuery AOP和JavaScript函數(shù)eval O生成禁止訪問函數(shù)的監(jiān)控代碼。S13 :實時檢測沙箱內(nèi)部惡意代碼,阻止危險的函數(shù)調(diào)用,請參照圖4所示,檢測沙箱內(nèi)部惡意代碼的步驟如下S130 :當沙箱入口函數(shù)被執(zhí)行時,系統(tǒng)進入口函數(shù)對應的沙箱;S131 :設置進入沙箱為系統(tǒng)的當前沙箱,系統(tǒng)的沙箱數(shù)量加I ;S132 :執(zhí)行沙箱內(nèi)部的程序代碼;S133 :如果沙箱內(nèi)部代碼執(zhí)行完成,則返回上一個沙箱,系統(tǒng)的沙箱數(shù)量減1,系統(tǒng)返回初始狀態(tài);S134:如果某個禁止訪問函數(shù)被執(zhí)行,則判斷該禁止訪問函數(shù)是否屬于當前的訪問控制,如果屬于當前的訪問控制,則執(zhí)行步驟S135;否則,返回步驟S132。S135 :發(fā)生危險程序行為時,阻止執(zhí)行。以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。
權(quán)利要求
1.一種輕量級JavaScript沙箱的實現(xiàn)方法,其特征在于,包括如下步驟 510:定義沙箱內(nèi)部的訪問控制; 511:根據(jù)所定義的訪問控制自動生成沙箱監(jiān)控代碼; 512:根據(jù)所定義的訪問控制自動生成禁止訪問函數(shù)的監(jiān)控代碼; 513:實時檢測沙箱內(nèi)部惡意代碼,阻止危險的函數(shù)調(diào)用。
2.如權(quán)利要求I所述輕量級JavaScript沙箱的實現(xiàn)方法,其特征在于,所述步驟SlO具體包括 5101:定義一個函數(shù)作為沙箱范圍,將可疑的JavaScript代碼封裝在這個特定的函數(shù)內(nèi)部,針對這個沙箱定義禁止訪問的函數(shù)集合; 5102:對一組訪問控制定義一個訪問控制對象數(shù)組,每一個數(shù)組元素對應一個訪問控制。
3.如權(quán)利要求2所述輕量級JavaScript沙箱的實現(xiàn)方法,其特征在于,步驟S102中,每一個訪問控制包括有沙箱名稱和禁止訪問函數(shù)數(shù)組這兩個部分,沙箱名稱為沙箱入口函數(shù)名稱,禁止訪問函數(shù)數(shù)組的每一個元素是對應的沙箱內(nèi)部禁止訪問的一個函數(shù)名稱。
4.如權(quán)利要求3所述輕量級JavaScript沙箱的實現(xiàn)方法,其特征在于,所述步驟Sll具體包括 5110:逐個訪問訪問控制對象數(shù)組,取出其中的訪問控制對象; 5111:根據(jù)訪問控制對象的沙箱名稱,生成入口函數(shù)的監(jiān)控代碼的字符串; 5112:根據(jù)步驟Slll中生成的字符串,使用jQuery AOP和JavaScript函數(shù)生成沙箱的監(jiān)控代碼。
5.如權(quán)利要求4所述輕量級JavaScript沙箱的實現(xiàn)方法,其特征在于所述步驟S12具體包括 5120:逐個訪問控制對象數(shù)組元素,取出其中的訪問控制對象; 5121:根據(jù)訪問控制對象的禁止訪問函數(shù)數(shù)組生成禁止訪問函數(shù)的監(jiān)控代碼的字符串; S121 :根據(jù)步驟S121生成的字符串,使用jQuery AOP和JavaScript函數(shù)生成禁止訪問函數(shù)的監(jiān)控代碼。
6.如權(quán)利要求5所述輕量級JavaScript沙箱的實現(xiàn)方法,其特征在于所述步驟S13具體包括。
5130:當沙箱入口函數(shù)被執(zhí)行時,系統(tǒng)進入口函數(shù)對應的沙箱; 5131:設置進入沙箱為系統(tǒng)的當前沙箱,系統(tǒng)的沙箱數(shù)量加I ; 5132:執(zhí)行沙箱內(nèi)部的程序代碼; 5133:如果沙箱內(nèi)部代碼執(zhí)行完成,則返回上一個沙箱,系統(tǒng)的沙箱數(shù)量減1,系統(tǒng)返回初始狀態(tài); S134:如果某個禁止訪問函數(shù)被執(zhí)行,則判斷該禁止訪問函數(shù)是否屬于當前的訪問控制,如果屬于當前的訪問控制,則執(zhí)行步驟S135 ;否則,返回步驟S132 ; S135 :發(fā)生危險程序行為時,阻止執(zhí)行。
全文摘要
本發(fā)明公開了一種輕量級JavaScript沙箱的實現(xiàn)方法,包括如下步驟S10定義沙箱內(nèi)部的訪問控制;S11根據(jù)所定義的訪問控制自動生成沙箱監(jiān)控代碼;S12根據(jù)所定義的訪問控制自動生成禁止訪問函數(shù)的監(jiān)控代碼;S13實時檢測沙箱內(nèi)部惡意代碼,阻止危險的函數(shù)調(diào)用。本發(fā)明輕量級JavaScript沙箱的實現(xiàn)方法簡單有效,便于程序員的掌握和操作的輕量級JavaScript沙箱的實現(xiàn)方法,確保JavaScript程序代碼在沙箱內(nèi)部安全執(zhí)行,不產(chǎn)生危險的程序行為。
文檔編號G06F21/53GK102930203SQ201210386639
公開日2013年2月13日 申請日期2012年10月12日 優(yōu)先權(quán)日2012年10月12日
發(fā)明者吳明暉, 呂嘉, 顏暉, 金蒼宏, 薛蓮 申請人:浙江大學城市學院