[發(fā)明專利]一種基于腳本交叉編譯的Python安全擴(kuò)展方法在審
| 申請(qǐng)?zhí)枺?/td> | 202110239130.0 | 申請(qǐng)日: | 2021-03-04 |
| 公開(kāi)(公告)號(hào): | CN113031931A | 公開(kāi)(公告)日: | 2021-06-25 |
| 發(fā)明(設(shè)計(jì))人: | 沈方陽(yáng);儲(chǔ)備;涂子豪;雷宇;賈夢(mèng) | 申請(qǐng)(專利權(quán))人: | 嘉興豐鳥(niǎo)科技有限公司;奧本未來(lái)(北京)科技有限責(zé)任公司 |
| 主分類號(hào): | G06F8/30 | 分類號(hào): | G06F8/30;G06F8/41;G06F21/53 |
| 代理公司: | 北京德崇智捷知識(shí)產(chǎn)權(quán)代理有限公司 11467 | 代理人: | 王金雙 |
| 地址: | 314500 浙江省嘉興市桐*** | 國(guó)省代碼: | 浙江;33 |
| 權(quán)利要求書(shū): | 查看更多 | 說(shuō)明書(shū): | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 一種 基于 腳本 交叉 編譯 python 安全 擴(kuò)展 方法 | ||
1.一種基于腳本交叉編譯的Python安全擴(kuò)展方法,其特征在于,包括以下步驟:
定義圖靈完備的腳本語(yǔ)言,并提供函數(shù)調(diào)用功能;
在宿主程序中定義腳本語(yǔ)言程序安全規(guī)則;
從腳本語(yǔ)言源程序生成抽象語(yǔ)法樹(shù);
對(duì)生成的抽象語(yǔ)法樹(shù)進(jìn)行過(guò)濾和安全檢查;
從安全的抽象語(yǔ)法樹(shù)生成Python源代碼,在宿主環(huán)境中加載執(zhí)行。
2.根據(jù)權(quán)利要求1所述的基于腳本交叉編譯的Python安全擴(kuò)展方法,其特征在于,所述定義圖靈完備的腳本語(yǔ)言,并提供函數(shù)調(diào)用功能的步驟,還包括,
定義OSL腳本語(yǔ)言的語(yǔ)法,并用巴克斯范式進(jìn)行表達(dá);
證明OSL腳本語(yǔ)言的語(yǔ)法的圖靈完備性。
3.根據(jù)權(quán)利要求2所述的基于腳本交叉編譯的Python安全擴(kuò)展方法,其特征在于,所述證明OSL腳本語(yǔ)言的語(yǔ)法的圖靈完備性的步驟,還包括,
對(duì)于圖靈機(jī)有限字符集,為每個(gè)字符創(chuàng)建一個(gè)變量;
構(gòu)造一個(gè)內(nèi)存允許的最大數(shù)組,表示圖靈機(jī)輸入輸出紙帶;
創(chuàng)建一個(gè)變量存儲(chǔ)當(dāng)前讀寫(xiě)頭位置;
創(chuàng)建一個(gè)變量存儲(chǔ)當(dāng)前狀態(tài)編號(hào);
用if-else條件轉(zhuǎn)移代碼塊,判斷實(shí)現(xiàn)所有狀態(tài)轉(zhuǎn)移函數(shù);
根據(jù)當(dāng)前狀態(tài)編號(hào),改變讀寫(xiě)頭位置數(shù)組變量值,并改變讀寫(xiě)頭位置。
4.根據(jù)權(quán)利要求1所述的基于腳本交叉編譯的Python安全擴(kuò)展方法,其特征在于,所述在宿主程序中定義腳本語(yǔ)言程序安全規(guī)則的步驟,還包括,
提供定義腳本程序可調(diào)用的系統(tǒng)函數(shù)、庫(kù)函數(shù)和自定義函數(shù)的Python函數(shù);
創(chuàng)建對(duì)象數(shù)組,每個(gè)對(duì)象數(shù)據(jù)包含允許調(diào)用的函數(shù)名稱字符串,以及函數(shù)的參數(shù)類型和順序列表;
對(duì)于需要通過(guò)調(diào)用特殊Python對(duì)象方法實(shí)現(xiàn)的功能,提供普通函數(shù)進(jìn)行調(diào)用轉(zhuǎn)發(fā),并將普通函數(shù)加入可調(diào)用函數(shù)列表中;
提供設(shè)置腳本程序允許使用的靜態(tài)內(nèi)存大小的函數(shù),并將設(shè)置的大小記錄在變量中。
5.根據(jù)權(quán)利要求1所述的基于腳本交叉編譯的Python安全擴(kuò)展方法,其特征在于,所述從腳本語(yǔ)言源程序生成抽象語(yǔ)法樹(shù)的步驟,還包括,
用Python實(shí)現(xiàn)的詞法分析器對(duì)OSL腳本源程序進(jìn)行詞法分析,并定義關(guān)鍵字;
定義token類別;
定義字面量token;
定義token匹配規(guī)則;
從Token序列生成抽象語(yǔ)法樹(shù)。
6.根據(jù)權(quán)利要求1所述的基于腳本交叉編譯的Python安全擴(kuò)展方法,其特征在于,所述從Token序列生成抽象語(yǔ)法樹(shù)的步驟,還包括,
定義抽象語(yǔ)法樹(shù)可包含的節(jié)點(diǎn)類型;
所有節(jié)點(diǎn)繼承自共同父類ASTNode,父類節(jié)點(diǎn)存儲(chǔ)當(dāng)前節(jié)點(diǎn)的源程序行號(hào),子節(jié)點(diǎn)列表;
使用Python實(shí)現(xiàn)的語(yǔ)法分析器,根據(jù)文法分析抽象語(yǔ)法樹(shù)節(jié)點(diǎn),并構(gòu)造抽象語(yǔ)法樹(shù)。
7.根據(jù)權(quán)利要求1所述的基于腳本交叉編譯的Python安全擴(kuò)展方法,其特征在于,所述對(duì)生成的抽象語(yǔ)法樹(shù)進(jìn)行過(guò)濾和安全檢查的步驟,還包括,
根據(jù)宿主程序記錄的允許調(diào)用函數(shù)列表,對(duì)生成的抽象語(yǔ)法樹(shù)進(jìn)行遍歷,對(duì)抽象語(yǔ)法樹(shù)中所有可達(dá)的CallNode記錄的函數(shù)名稱和參數(shù)列表進(jìn)行過(guò)濾,找出函數(shù)名稱和參數(shù)個(gè)數(shù)、類型與允許調(diào)用函數(shù)列表中任何項(xiàng)都不匹配的CallNode節(jié)點(diǎn),將這些節(jié)點(diǎn)及其子樹(shù)刪除,對(duì)抽象語(yǔ)法樹(shù)進(jìn)行剪枝;
對(duì)抽象語(yǔ)法樹(shù)進(jìn)行遍歷,對(duì)所有的VarsDeclsNode和VarDeclInitNode中記錄的數(shù)據(jù)類型和個(gè)數(shù)進(jìn)行統(tǒng)計(jì),計(jì)算出程序運(yùn)行時(shí)所需的內(nèi)存大小,并和宿主程序中安全規(guī)則設(shè)置的允許內(nèi)存占用大小進(jìn)行比較,如果超過(guò)規(guī)則允許大小,則終止程序編譯,向用戶報(bào)告內(nèi)存申請(qǐng)超界錯(cuò)誤;
對(duì)抽象語(yǔ)法樹(shù)進(jìn)行遍歷,對(duì)所有涉及間接內(nèi)存訪問(wèn)操作的節(jié)點(diǎn)進(jìn)行索引越界檢查;
對(duì)編譯期可求出索引值的節(jié)點(diǎn),與數(shù)組聲明或賦值時(shí)設(shè)置的大小進(jìn)行比較,如果索引超出數(shù)組大小,對(duì)抽象語(yǔ)法樹(shù)進(jìn)行剪枝,刪除該節(jié)點(diǎn)及子樹(shù);
對(duì)于編譯期不可求值的索引值,在索引節(jié)點(diǎn)上添加索引檢查標(biāo)志。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于嘉興豐鳥(niǎo)科技有限公司;奧本未來(lái)(北京)科技有限責(zé)任公司,未經(jīng)嘉興豐鳥(niǎo)科技有限公司;奧本未來(lái)(北京)科技有限責(zé)任公司許可,擅自商用是侵權(quán)行為。如果您想購(gòu)買(mǎi)此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請(qǐng)聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202110239130.0/1.html,轉(zhuǎn)載請(qǐng)聲明來(lái)源鉆瓜專利網(wǎng)。
- 腳本處理方法及裝置
- 一種實(shí)現(xiàn)腳本引擎的系統(tǒng)及方法
- 代理自動(dòng)配置腳本的處理方法及代理自動(dòng)配置腳本服務(wù)器
- 一種腳本執(zhí)行方法、裝置及計(jì)算設(shè)備
- 腳本轉(zhuǎn)換方法、裝置、計(jì)算機(jī)設(shè)備及存儲(chǔ)介質(zhì)
- 性能測(cè)試平臺(tái)腳本存儲(chǔ)方法、裝置、設(shè)備及存儲(chǔ)介質(zhì)
- 一種實(shí)現(xiàn)測(cè)試腳本驗(yàn)證的方法及系統(tǒng)
- 結(jié)構(gòu)化查詢語(yǔ)言腳本審查方法及相關(guān)設(shè)備
- 基于FitNesse框架的數(shù)據(jù)驅(qū)動(dòng)腳本庫(kù)的方法、系統(tǒng)及介質(zhì)
- 一種腳本審計(jì)方法、裝置、設(shè)備及存儲(chǔ)介質(zhì)
- 一種軟件開(kāi)發(fā)中的自動(dòng)化編譯方法及系統(tǒng)
- 一種動(dòng)態(tài)分配編譯機(jī)的系統(tǒng)及其方法
- 一種實(shí)現(xiàn)安卓編譯隔離的方法和系統(tǒng)
- 調(diào)度服務(wù)器、編譯服務(wù)器及分布式編譯方法
- 代碼編譯方法、編譯設(shè)備、存儲(chǔ)介質(zhì)及裝置
- 文件編譯方法、裝置、編譯設(shè)備及存儲(chǔ)介質(zhì)
- 一種編譯方法、裝置及系統(tǒng)
- 一種編譯方法和相關(guān)裝置
- 一種編譯方法、電子設(shè)備及計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)
- 一種代碼編譯方法、裝置及計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)





