CN103440440A - 一种增强JavaScript函数封装性的方法 - Google Patents
一种增强JavaScript函数封装性的方法 Download PDFInfo
- Publication number
- CN103440440A CN103440440A CN2013103783761A CN201310378376A CN103440440A CN 103440440 A CN103440440 A CN 103440440A CN 2013103783761 A CN2013103783761 A CN 2013103783761A CN 201310378376 A CN201310378376 A CN 201310378376A CN 103440440 A CN103440440 A CN 103440440A
- Authority
- CN
- China
- Prior art keywords
- function
- javascript
- objective function
- encapsulation
- character
- 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.)
- Pending
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种增强JavaScript函数封装性的方法,包括如下步骤:附加访问权限控制符到JavaScript函数,定义JavaScript函数的封装性;根据JavaScript函数访问权限控制符和函数封装性定义,设计JavaScript程序预处理系统生成JavaScript函数的监控代码;运用JavaScript函数监控代码,在运行时监控JavaScript程序的运行过程,阻止违反JavaScript函数封装性定义的函数调用。本发明提供了一种安全可靠、便于程序员学习和使用的增强JavaScript函数封装性的方法,以增强JavaScript函数的封装性,提高JavaScript程序的模块化和实现隐藏,增加JavaScript程序的安全性和正确性。
Description
技术领域
本发明涉及软件安全领域,更具体的说是涉及一种增强JavaScript函数封装性的方法。
背景技术
JavaScript(语言规范是ECMAScript),是一种广泛用于客户端网页开发的脚本语言,最早是在HTML上使用的,用来给HTML网页添加动态功能,然而现在JavaScript也可被用于网络服务器,如Node.js。不同于服务器端脚本语言(例如PHP与ASP),JavaScript主要被作为客户端脚本语言在用户的浏览器上运行,其源代码在发往客户端运行之前不需经过编译,而是将文本格式的字符代码发送给浏览器由浏览器解释运行,不需要服务器的支持。所以在早期程序员比较青睐于JavaScript以减少对服务器的负担,而与此同时也带来另一个问题:安全性。随着服务器的强壮,虽然现在的程序员更喜欢运行于服务端的脚本以保证安全,但JavaScript仍然以其跨平台、容易上手等优势大行其道。
函数是JavaScript程序的基本结构,JavaScript程序由一组函数组成,只有确保目标JavaScript函数安全和可靠的执行,JavaScript程序才能被安全和可靠的执行,不产生危险和恶意的程序行为。
但是目前,由于JavaScript语言的某些动态语法特性,例如函数闭包和原型继承,缺乏有效的函数封装性机制支持,破坏了传统的软件模块化原则,容易引起JavaScript程序的可靠性和安全性问题。
而主流的静态面向对象语言一般具有访问权限控制符和完善的函数封装性机制,如果可以借鉴主流静态面向对象语言的封装性机制,来设计一种增强JavaScript函数封装性的方法,将有利于提高JavaScript程序的模块化和实现隐藏,增加JavaScript程序的安全性和正确性。
发明内容
为解决上述问题,本发明的目的在于提供一种安全可靠、便于程序员学习和使用的增强JavaScript函数封装性的方法,以增强JavaScript函数的封装性,提高JavaScript程序的模块化和实现隐藏,增加JavaScript程序的安全性和正确性。
为实现上述目的,本发明的技术方案为:
一种增强JavaScript函数封装性的方法,包括如下步骤:
S1:附加访问权限控制符到JavaScript函数,定义JavaScript函数的封装性;
S2:根据步骤S1提出的JavaScript函数访问权限控制符和JavaScript函数封装性定义,设计JavaScript程序预处理系统生成JavaScript函数的监控代码;
S3:运用JavaScript函数监控代码,在运行时监控JavaScript程序的运行过程,阻止违反JavaScript函数封装性定义的函数调用。
进一步的,所述步骤S1中的访问权限控制符设置为字符A、字符B和字符C,所述JavaScript函数的封装性定义如下:
使用字符A修饰目标函数时,允许当前函数所在范围的语句调用目标函数,禁止其它访问控制范围内的语句调用目标函数;
使用字符B修饰目标函数时,允许当前函数所在范围的语句调用目标函数,允许友员函数内部范围内的语句调用目标函数,禁止其他访问控制范围内的语句调用目标函数;
使用字符C修饰目标函数时,允许目标函数所在范围的语句调用目标函数,允许从目标函数的外部范围的函数原型继承的函数调用目标函数,禁止其它访问控制范围内的语句调用目标函数。
优选的,所述字符A、字符B和字符C分别设置为current、friend和inherit。
进一步的,所述步骤S2中,预处理系统根据目标函数的封装性定义扫描目标函数的程序上下文,生成目标函数的监控代码,其具体步骤如下:
S21:扫描附加访问权限控制符的目标函数,生成目标函数的包装函数;
S22:用步骤S21中生成的包装函数代码替换源程序中的目标函数代码;
S23:在步骤S22中生成的程序前面附加对JavaScript面向方面扩展库的调用;
S24:根据目标函数的访问权限控制符,在步骤S23生成的程序后面附加相应的授权代码,授权代码利用JavaScript面向方面扩展库监控访问控制范围内的目标函数的调用,对正确的目标函数调用进行授权;
S25:在步骤S24生成的程序后面附加检查函数的定义,检查函数的参数是目标函数名称,测试对目标函数的调用是否正确;
S26:将步骤S25生成的程序替换包含目标函数的源程序。
进一步的,所述步骤S3具体包括步骤如下:
S31:当目标函数被执行,继续执行步骤S32;
S32:如果针对目标函数的调用在所述JavaScript函数的封装性定义范围内,继续执行步骤S33;如果针对目标函数的调用不在JavaScript函数的封装性定义范围内,执行步骤S34;
S33:授权代码对正确的目标函数调用进行授权,继续执行步骤S34;
S34:调用包装函数,继续执行步骤S35;
S35:调用检查函数,检查针对目标函数的调用是否合法,如果针对目标函数的调用已被授权,执行步骤36;如果针对目标函数的调用没有被授权,则抛出运行时异常;
S36:执行目标函数,完成后继续执行程序。
本发明增强JavaScript函数封装性的方法取得的有益效果:(1)借鉴了主流静态面向对象语言的访问控制权限控制符和封装性体制,可以方便熟悉主流静态面向对象语言的程序员学习和使用;(2)增强JavaScript函数的封装性,有利于提高JavaScript程序的模块化和实现隐藏,增加JavaScript程序的安全性和正确性。
附图说明
图1为本发明的方法流程图示。
图2为本发明实施例中生成JavaScript函数监控代码的流程图示。
图3为本发明实施例中预处理系统生成的JavaScript源程序(目标函数变成其wrapper函数)和监控代码。
图4为本发明实施例中运用监控代码在运行中监控JavaScript程序的流程图示。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
请参照图一所示,本发明实施例增强JavaScript函数封装性的方法包括如下步骤:
S1:附加访问权限控制符到JavaScript函数,定义JavaScript函数的封装性,具体如下:
主流静态面向对象语言中的访问权限控制符private、protected和public是JavaScript语言标准ECMAScript保留字,不允许在合法的JavaScript程序中出现。步骤S1中的访问权限控制符设置为字符A、字符B和字符C,在本实施例中,所述访问权限控制符A、B和C分别设置为:当前访问权限修饰符“current”、友好访问权限控制符“friend”和继承访问权限修饰符“inherit”。访问权限控制符A、B、C还可以采用除保留字以外的其它任意字符。根据上述访问权限控制符,将JavaScript函数的封装性定义如下:
使用current修饰目标函数,允许当前函数所在范围的语句调用目标函数,禁止其它访问控制范围内的语句调用目标函数;使用friend修饰目标函数,允许当前函数所在范围的语句调用目标函数,允许友员函数内部范围内的语句调用目标函数,禁止其他访问控制范围内的语句调用目标函数;使用inherit修饰目标函数,允许目标函数所在范围的语句调用目标函数,允许从目标函数的外部范围的函数原型继承的函数调用目标函数,禁止其它访问控制范围内的语句调用目标函数,具体如下表所述:
S2:根据步骤S1提出的JavaScript函数访问权限控制符和JavaScript函数封装性定义,设计JavaScript程序预处理系统生成JavaScript函数的监控代码;
如图2所示,预处理系统根据目标函数的封装性定义扫描目标函数的程序上下文,生成目标函数的监控代码,具体步骤如下:
S21:扫描附加访问权限控制符的目标函数,生成目标函数的包装函数wrapper;
S22:将步骤S21生成的目标函数的包装函数wrapper替换源程序中的目标函数代码;
S23:在步骤S22生成的程序前面附加对JavaScript面向方面扩展库jQuery-AOP的调用;
S24:根据目标函数的访问权限控制符,在步骤S23生成的程序后面附加相应的授权代码authorizor,授权代码authorizor利用jQuery-AOP针对访问控制范围内监控目标函数的调用,对正确的目标函数调用进行授权;
S25:在步骤S24生成的程序后面附加检查函数checkFunctionInvoke的定义,检查函数checkFunctionInvoke的参数是目标函数名称,测试对目标函数的调用是否正确;
S26:将步骤S25生成的程序替换包含目标函数的源程序,生成的源程序和生成的监控代码如图3所示,包含以下5个部分:
(1)JavaScript函数库jQuery;
(2)JavaScript面向方面扩展库jQuery-AOP,jQuery-AOP调用JavaScript函数库jQuery;
(3)改写后的JavaScript源程序,目标函数被替换成目标函数的包装函数wrapper,wrapper函数的函数名称和目标函数相同,wrapper函数的函数体由调用检查函数checkFunctionInvoke的代码和原目标函数的代码两部分组成;
(4)检查函数checkFunctionInvoke检查对目标函数的调用是否正确;
(5)针对目标函数的封装性定义,生成的授权代码authorizor,authorizor利用jQuery-AOP对正确的目标函数调用进行授权。
S3:运用JavaScript函数监控代码,在运行时监控JavaScript程序的运行过程,阻止违反JavaScript函数封装性定义的函数调用。如图4所示,所述S3步骤包括如下具体步骤:
S31:当目标函数被执行,继续执行步骤S32;
S32:如果针对目标函数的调用在所述JavaScript函数的封装性定义范围内,继续执行步骤S33;如果针对目标函数的调用不在JavaScript函数的封装性定义范围内,执行步骤S34;
S33:授权代码authorizor对正确的目标函数调用进行授权,继续执行步骤S34;
S34:调用包装函数wrapper,继续执行步骤S35;
S35:调用检查函数checkFunctionInvoke,检查针对目标函数的调用是否合法,如果针对目标函数的调用已被授权,执行步骤36;如果针对目标函数的调用没有被授权,则抛出运行时异常;
S36:执行目标函数,完成后继续执行程序。
以上所述仅为本发明的较佳实施例而己,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (6)
1.一种增强JavaScript函数封装性的方法,其特性在于,包括如下步骤:
S1:附加访问权限控制符到JavaScript函数,定义JavaScript函数的封装性;
S2:根据步骤S1提出的JavaScript函数访问权限控制符和JavaScript函数封装性定义,设计JavaScript程序预处理系统生成JavaScript函数的监控代码;
S3:运用JavaScript函数监控代码,在运行时监控JavaScript程序的运行过程,阻止违反JavaScript函数封装性定义的函数调用。
2.根据权利要求1所述的增强JavaScript函数封装性的方法,其特性在于:所述步骤S1中的访问权限控制符设置为字符A、字符B和字符C,所述JavaScript函数的封装性定义如下:
使用字符A修饰目标函数,允许当前函数所在范围的语句调用目标函数,禁止其它访问控制范围内的语句调用目标函数;
使用字符B修饰目标函数,允许当前函数所在范围的语句调用目标函数,允许友员函数内部范围内的语句调用目标函数,禁止其他访问控制范围内的语句调用目标函数;
使用字符C修饰目标函数,允许目标函数所在范围的语句调用目标函数,允许从目标函数的外部范围的函数原型继承的函数调用目标函数,禁止其它访问控制范围内的语句调用目标函数。
3.根据权利要求2所述的增强JavaScript函数封装性的方法,其特性在于:所述步骤S2中,预处理系统根据目标函数的封装性定义扫描目标函数的程序上下文,生成目标函数的监控代码。
4.根据权利要求3所述的增强JavaScript函数封装性的方法,其特性在于,所述步骤S2具体包括:
S21:扫描附加访问权限控制符的目标函数,生成目标函数的包装函数;
S22:用步骤S21中生成的包装函数代码替换源程序中的目标函数代码;
S23:在步骤S22中生成的程序前面附加对JavaScript面向方面扩展库的调用;
S24:根据目标函数的访问权限控制符,在步骤S23生成的程序后面附加相应的授权代码,授权代码利用JavaScript面向方面扩展库监控访问控制范围内的目标函数的调用,对正确的目标函数调用进行授权;
S25:在步骤S24生成的程序后面附加检查函数的定义,检查函数的参数是目标函数名称,测试对目标函数的调用是否正确;
S26:将步骤S25生成的程序替换包含目标函数的源程序。
5.根据权利要求4所述的增强JavaScript函数封装性的方法,其特性在于:所述步骤S3具体包括如下:
S31:当目标函数被执行,继续执行步骤S32;
S32:如果针对目标函数的调用在所述JavaScript函数的封装性定义范围内,继续执行步骤S33;如果针对目标函数的调用不在JavaScript函数的封装性定义范围内,执行步骤S34;
S33:授权代码对正确的目标函数调用进行授权,继续执行步骤S34;
S34:调用包装函数,继续执行步骤S35;
S35:调用检查函数,检查针对目标函数的调用是否合法,如果针对目标函数的调用已被授权,执行步骤36;如果针对目标函数的调用没有被授权,则抛出运行时异常;
S36:执行目标函数,完成后继续执行程序。
6.根据权利要求2-5中任一所述的增强JavaScript函数封装性的方法,其特性在于,所述字符A、字符B和字符C分别设置为current、friend和inherit。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2013103783761A CN103440440A (zh) | 2013-08-27 | 2013-08-27 | 一种增强JavaScript函数封装性的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2013103783761A CN103440440A (zh) | 2013-08-27 | 2013-08-27 | 一种增强JavaScript函数封装性的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103440440A true CN103440440A (zh) | 2013-12-11 |
Family
ID=49694133
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2013103783761A Pending CN103440440A (zh) | 2013-08-27 | 2013-08-27 | 一种增强JavaScript函数封装性的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103440440A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106484489A (zh) * | 2015-09-01 | 2017-03-08 | 阿里巴巴集团控股有限公司 | 一种扩展编程语言特性的方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101383828A (zh) * | 2008-10-13 | 2009-03-11 | 中国电信股份有限公司 | 一种JavaScript对象的调用方法、系统和终端 |
US20110219433A1 (en) * | 2010-03-08 | 2011-09-08 | Vmware, Inc. | Task-based access control in a virtualization environment |
CN102799477A (zh) * | 2012-07-16 | 2012-11-28 | 中兴通讯股份有限公司 | 资源访问方法及装置 |
-
2013
- 2013-08-27 CN CN2013103783761A patent/CN103440440A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101383828A (zh) * | 2008-10-13 | 2009-03-11 | 中国电信股份有限公司 | 一种JavaScript对象的调用方法、系统和终端 |
US20110219433A1 (en) * | 2010-03-08 | 2011-09-08 | Vmware, Inc. | Task-based access control in a virtualization environment |
CN102799477A (zh) * | 2012-07-16 | 2012-11-28 | 中兴通讯股份有限公司 | 资源访问方法及装置 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106484489A (zh) * | 2015-09-01 | 2017-03-08 | 阿里巴巴集团控股有限公司 | 一种扩展编程语言特性的方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Chen et al. | Mystique: Uncovering information leakage from browser extensions | |
Lekies et al. | 25 million flows later: large-scale detection of DOM-based XSS | |
Robertson et al. | Static Enforcement of Web Application Integrity Through Strong Typing. | |
US9231975B2 (en) | Safe script templating to provide reliable protection against attacks | |
Scholte et al. | Preventing input validation vulnerabilities in web applications through automated type analysis | |
US20180336348A1 (en) | Modifying web page code to include code to protect output | |
Maffeis et al. | Isolating JavaScript with filters, rewriting, and wrappers | |
US20160004858A1 (en) | Security-Enhanced Web Application Module Translation | |
US20110185271A1 (en) | Marking documents with executable text for processing by computing systems | |
Prokhorenko et al. | Context-oriented web application protection model | |
McFadden et al. | Security chasms of wasm | |
Patil et al. | Towards fine-grained access control in javascript contexts | |
CN103177199A (zh) | 网页应用代码保护方法及系统和执行的提速方法及系统 | |
US9600596B2 (en) | Parser wrapper class | |
Barua et al. | Protecting web browser extensions from javascript injection attacks | |
Zhao et al. | A new framework of security vulnerabilities detection in PHP web application | |
Zhao et al. | Compile-time code virtualization for android applications | |
Luo et al. | Automated code injection prevention for web applications | |
JP2013186647A (ja) | 難読化装置、難読化方法、及び難読化プログラム、並びに難読化されたソースコード | |
CN103440440A (zh) | 一种增强JavaScript函数封装性的方法 | |
Bhargavan et al. | Defensive JavaScript: Building and Verifying Secure Web Components | |
CN102930203B (zh) | 一种轻量级JavaScript沙箱的实现方法 | |
CN113449330B (zh) | 对Javascript加密文件进行传输的方法 | |
US8584105B1 (en) | Javascript application programming interfaces for independently compiled javascript binaries | |
Neves et al. | A comparison between JAVA and PHP |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20131211 |