CN102930203B - 一种轻量级JavaScript沙箱的实现方法 - Google Patents
一种轻量级JavaScript沙箱的实现方法 Download PDFInfo
- Publication number
- CN102930203B CN102930203B CN201210386639.9A CN201210386639A CN102930203B CN 102930203 B CN102930203 B CN 102930203B CN 201210386639 A CN201210386639 A CN 201210386639A CN 102930203 B CN102930203 B CN 102930203B
- Authority
- CN
- China
- Prior art keywords
- sandbox
- function
- access control
- javascript
- access
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Abstract
本发明公开了一种轻量级JavaScript沙箱的实现方法,包括如下步骤:S10:定义沙箱内部的访问控制;S11:根据所定义的访问控制自动生成沙箱监控代码;S12:根据所定义的访问控制自动生成禁止访问函数的监控代码;S13:实时检测沙箱内部恶意代码,阻止危险的函数调用。本发明轻量级JavaScript沙箱的实现方法简单有效,便于程序员的掌握和操作的轻量级JavaScript沙箱的实现方法,确保JavaScript程序代码在沙箱内部安全执行,不产生危险的程序行为。
Description
技术领域
本发明属于软件安全技术领域,涉及一种轻量级JavaScript沙箱的实现方法。
背景技术
JavaScript语言是一种广泛应用于互联网应用程序的脚本语言,JavaScript语言具有很好的表达能力和灵活性,使用JavaScript语言可以提高软件系统的灵活性和表达性,提高软件系统的可读性和可重用性。
而函数(function)是JavaScript语言的基本结构,JavaScript程序系由一组函数组成,只有确保目标JavaScript函数安全和可靠的执行,JavaScript程序才能够被安全和可靠的执行,不产生危险和恶意的程序行为。JavaScript语言支持运行时求解(runtime evaluation)语法特性,很多软件系统(例如社交网络)利用运行时求解支持用户提供JavaScript代码,由于缺乏有效的安全检查机制,直接运行用户提供的JavaScript代码可能引入危险和恶意的程序行为,影响整个软件系统的可靠性和安全性。
目前解决JavaScript程序安全性和可靠性问题的一种方法是建立沙箱,让可疑的JavaScript代码在沙箱中运行,通过沙箱防止恶意的JavaScript程序代码的执行。然而,现有的JavaScript程序实现一般较为复杂,一般需要扩展浏览器或者修改Web应用程序,甚至需要修改JavaScript的原有语法,程序员掌握和操作起来比较困难。
故,实有必要进行研究,提供一种简单有效,便于程序员的掌握和操作的轻量级JavaScript沙箱的实现方法。
发明内容
为解决上述问题,本发明的目的在于提供一种简单有效,便于程序员的掌握和操作的轻量级JavaScript沙箱的实现方法,确保JavaScript程序代码在沙箱内部安全执行,不产生危险的程序行为。
为实现上述目的,本发明的技术方案为:
一种轻量级JavaScript沙箱的实现方法,包括如下步骤:
S10:定义沙箱内部的访问控制;
S11:根据所定义的访问控制自动生成沙箱监控代码;
S12:根据所定义的访问控制自动生成禁止访问函数的监控代码;
S13:实时检测沙箱内部恶意代码,阻止危险的函数调用。
进一步地,所述步骤S10具体包括:
S101:定义一个函数作为沙箱范围,将可疑的JavaScript代码封装在这个特定的函数内部,针对这个沙箱定义禁止访问的函数集合;
S102:对一组访问控制定义一个访问控制对象数组,每一个数组元素对应一个访问控制。
进一步地,步骤S102中,每一个访问控制包括有沙箱名称和禁止访问函数数组这两个部分,沙箱名称为沙箱入口函数名称,禁止访问函数数组的每一个元素是对应的沙箱内部禁止访问的一个函数名称。
进一步地,所述步骤S11具体包括:
S110:逐个访问访问控制对象数组,取出其中的访问控制对象;
S111:根据访问控制对象的沙箱名称,生成入口函数的监控代码的字符串;
S112:根据步骤S111中生成的字符串,使用jQuery AOP和JavaScript函数生成沙箱的监控代码。
进一步地,所述步骤S12具体包括:
S120:逐个访问控制对象数组元素,取出其中的访问控制对象;
S121:根据访问控制对象的禁止访问函数数组生成禁止访问函数的监控代码的字符串;
S121:根据步骤S121生成的字符串,使用jQuery AOP和JavaScript函数生成禁止访问函数的监控代码。
进一步地,所述步骤S13具体包括:。
S130:当沙箱入口函数被执行时,系统进入口函数对应的沙箱;
S131:设置进入沙箱为系统的当前沙箱,系统的沙箱数量加1;
S132:执行沙箱内部的程序代码;
S133:如果沙箱内部代码执行完成,则返回上一个沙箱,系统的沙箱数量减1,系统返回初始状态;
S134:如果某个禁止访问函数被执行,则判断该禁止访问函数是否属于当前的访问控制,如果属于当前的访问控制,则执行步骤S135;否则,返回步骤S132;
S135:发生危险程序行为时,阻止执行
相较于现有技术,本发明轻量级JavaScript沙箱的实现方法简单有效,便于程序员的掌握和操作的轻量级JavaScript沙箱的实现方法,确保JavaScript程序代码在沙箱内部安全执行,不产生危险的程序行为。
附图说明
图1是本发明的方法流程图示。
图2是本发明生成沙箱的监控代码的流程图示。
图3是本发明生成禁止访问函数的监控代码的流程图示。
图4是本发明运行时检测沙箱内部恶意代码的流程图示。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
请参照图1所示,本发明轻量级JavaScript沙箱的实现方法包括如下步骤:
S10:定义沙箱内部的访问控制,具体包括如下步骤:
S101:定义一个函数作为沙箱范围,将可疑的JavaScript代码封装在这个特定的函数内部,针对这个沙箱定义禁止访问的函数集合,这些JavaScript函数的执行可能引起危险的程序行为;禁止访问的函数集合如下表所示:
S102:对一组访问控制定义一个访问控制对象数组,每一个数组元素对应一个访问控制。其中,每一个访问控制包括有沙箱名称和禁止访问函数数组这两个部分,沙箱名称为沙箱入口函数名称,禁止访问函数数组的每一个元素是对应的沙箱内部禁止访问的一个函数名称。
S11:根据所定义的访问控制自动生成沙箱监控代码,请参照图2所示,具体包括如下步骤:
S110:逐个访问访问控制对象数组,取出其中的访问控制对象;
S111:根据访问控制对象的入口函数名称定义沙箱名称,生成入口函数的监控代码的字符串;
S112:根据步骤S111中生成的字符串,使用jQuery AOP(JQuery的面向方面编程扩展)和JavaScript函数eval()生成沙箱的监控代码。
S12:根据所定义的访问控制自动生成禁止访问函数的监控代码,请参照图3所示,具体包括如下步骤:
S120:逐个访问控制对象数组元素,取出其中的访问控制对象;
S121:根据访问控制对象的禁止访问函数数组生成禁止访问函数的监控代码的字符串;
S121:根据步骤S121生成的字符串,使用jQuery AOP和JavaScript函数eval()生成禁止访问函数的监控代码。
S13:实时检测沙箱内部恶意代码,阻止危险的函数调用,请参照图4所示,检测沙箱内部恶意代码的步骤如下:
S130:当沙箱入口函数被执行时,系统进入口函数对应的沙箱;
S131:设置进入沙箱为系统的当前沙箱,系统的沙箱数量加1;
S132:执行沙箱内部的程序代码;
S133:如果沙箱内部代码执行完成,则返回上一个沙箱,系统的沙箱数量减1,系统返回初始状态;
S134:如果某个禁止访问函数被执行,则判断该禁止访问函数是否属于当前的访问控制,如果属于当前的访问控制,则执行步骤S135;否则,返回步骤S132。
S135:发生危险程序行为时,阻止执行。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (4)
1.一种轻量级JavaScript沙箱的实现方法,其特征在于,包括如下步骤:
S10:定义沙箱内部的访问控制;
S11:根据所定义的访问控制自动生成沙箱监控代码;
S12:根据所定义的访问控制自动生成禁止访问函数的监控代码;
S13:实时检测沙箱内部恶意代码,阻止危险的函数调用;
其中,所述步骤S10具体包括:
S101:定义一个函数作为沙箱范围,将可疑的JavaScript代码封装在这个特定的函数内部,针对这个沙箱定义禁止访问的函数集合;
S102:对一组访问控制定义一个访问控制对象数组,每一个数组元素对应一个访问控制;
所述步骤S102中,每一个访问控制包括有沙箱名称和禁止访问函数数组这两个部分,沙箱名称为沙箱入口函数名称,禁止访问函数数组的每一个元素是对应的沙箱内部禁止访问的一个函数名称。
2.如权利要求1所述轻量级JavaScript沙箱的实现方法,其特征在于,所述步骤S11具体包括:
S110:逐个访问访问控制对象数组,取出其中的访问控制对象;
S111:根据访问控制对象的沙箱名称,生成入口函数的监控代码的字符串;
S112:根据步骤S111中生成的字符串,使用jQuery AOP和JavaScript函数生成沙箱的监控代码。
3.如权利要求2所述轻量级JavaScript沙箱的实现方法,其特征在于:所述步骤S12具体包括:
S120:逐个访问访问控制对象数组元素,取出其中的访问控制对象;
S121:根据访问控制对象的禁止访问函数数组生成禁止访问函数的监控代码的字符串;
S122:根据步骤S121生成的字符串,使用jQuery AOP和JavaScript函数生成禁止访问函数的监控代码。
4.如权利要求3所述轻量级JavaScript沙箱的实现方法,其特征在于:所述步骤S13具体包括:
S130:当沙箱入口函数被执行时,系统进入口函数对应的沙箱;
S131:设置进入沙箱为系统的当前沙箱,系统的沙箱数量加1;
S132:执行沙箱内部的程序代码;
S133:如果沙箱内部代码执行完成,则返回上一个沙箱,系统的沙箱数量减1,系统返回初始状态;
S134:如果某个禁止访问函数被执行,则判断该禁止访问函数是否属于当前的访问控制,如果属于当前的访问控制,则执行步骤S135;否则,返回步骤S132;
S135:发生危险程序行为时,阻止执行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210386639.9A CN102930203B (zh) | 2012-10-12 | 2012-10-12 | 一种轻量级JavaScript沙箱的实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210386639.9A CN102930203B (zh) | 2012-10-12 | 2012-10-12 | 一种轻量级JavaScript沙箱的实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102930203A CN102930203A (zh) | 2013-02-13 |
CN102930203B true CN102930203B (zh) | 2015-08-26 |
Family
ID=47645000
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210386639.9A Active CN102930203B (zh) | 2012-10-12 | 2012-10-12 | 一种轻量级JavaScript沙箱的实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102930203B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104408367B (zh) * | 2014-11-28 | 2019-04-05 | 北京奇虎科技有限公司 | 应用程序配置方法与装置 |
CN106295336B (zh) * | 2015-06-26 | 2020-05-22 | 阿里巴巴集团控股有限公司 | 恶意程序检测方法及装置 |
CN109684845B (zh) * | 2018-12-27 | 2021-04-06 | 北京天融信网络安全技术有限公司 | 一种检测方法和装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101071372A (zh) * | 2007-03-30 | 2007-11-14 | 腾讯科技(深圳)有限公司 | 一种脚本内核管理方法及系统 |
CN101493766A (zh) * | 2009-02-24 | 2009-07-29 | 浪潮集团山东通用软件有限公司 | 一种解决active x组件版本冲突的轻量级虚拟化方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070261124A1 (en) * | 2006-05-03 | 2007-11-08 | International Business Machines Corporation | Method and system for run-time dynamic and interactive identification of software authorization requirements and privileged code locations, and for validation of other software program analysis results |
US8479286B2 (en) * | 2009-12-15 | 2013-07-02 | Mcafee, Inc. | Systems and methods for behavioral sandboxing |
CN102096786A (zh) * | 2011-03-04 | 2011-06-15 | 上海交通大学 | 基于硬件虚拟化的跨平台安全保护系统 |
-
2012
- 2012-10-12 CN CN201210386639.9A patent/CN102930203B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101071372A (zh) * | 2007-03-30 | 2007-11-14 | 腾讯科技(深圳)有限公司 | 一种脚本内核管理方法及系统 |
CN101493766A (zh) * | 2009-02-24 | 2009-07-29 | 浪潮集团山东通用软件有限公司 | 一种解决active x组件版本冲突的轻量级虚拟化方法 |
Non-Patent Citations (1)
Title |
---|
基于沙箱的Java安全体系结构;赵全明;《信息科学》;20070120(第1期);第13页 * |
Also Published As
Publication number | Publication date |
---|---|
CN102930203A (zh) | 2013-02-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2696288B1 (en) | Static tainting analysis system and method for taint analysis of computer program code | |
CN104102880B (zh) | 一种检测Android权限提升攻击的应用程序重写方法和系统 | |
Dahse et al. | Code reuse attacks in php: Automated pop chain generation | |
CN106503563B (zh) | 基于通用框架的批量漏洞检测方法 | |
Robertson et al. | Static Enforcement of Web Application Integrity Through Strong Typing. | |
Liu et al. | Enabling clone detection for ethereum via smart contract birthmarks | |
Fass et al. | Doublex: Statically detecting vulnerable data flows in browser extensions at scale | |
CN101446905B (zh) | 编译方法 | |
CN102930203B (zh) | 一种轻量级JavaScript沙箱的实现方法 | |
Cui et al. | Cochecker: Detecting capability and sensitive data leaks from component chains in android | |
CN104732146A (zh) | 一种Android程序漏洞检测方法及系统 | |
Balliu et al. | Friendly fire: cross-app interactions in IoT platforms | |
Tang et al. | The vulnerabilities in smart contracts: A survey | |
US20230065259A1 (en) | Method and apparatus for protecting smart contracts against attacks | |
US20150286746A1 (en) | Parser Wrapper Class | |
Grabowski et al. | Type-based enforcement of secure programming guidelines—code injection prevention at SAP | |
Zhao et al. | Compile-time code virtualization for android applications | |
Bouichou et al. | An overview of Ethereum and Solidity vulnerabilities | |
CN102891854B (zh) | 一种云端服务器安全控制方法 | |
US10505962B2 (en) | Blackbox program privilege flow analysis with inferred program behavior context | |
CN102902538B (zh) | 移动互联网智能终端应用中间件安全开发方法 | |
CN112100620A (zh) | 代码安全检测方法、装置、设备和可读存储介质 | |
Li et al. | Eosioanalyzer: An effective static analysis vulnerability detection framework for eosio smart contracts | |
CN103116543B (zh) | 白黑盒结合的Web应用安全检测方法 | |
CN105160256A (zh) | 一种检测web页面漏洞的方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |