CN110618809B - 一种前端网页输入约束提取方法和装置 - Google Patents
一种前端网页输入约束提取方法和装置 Download PDFInfo
- Publication number
- CN110618809B CN110618809B CN201910731804.1A CN201910731804A CN110618809B CN 110618809 B CN110618809 B CN 110618809B CN 201910731804 A CN201910731804 A CN 201910731804A CN 110618809 B CN110618809 B CN 110618809B
- Authority
- CN
- China
- Prior art keywords
- code
- end webpage
- input
- data flow
- slice
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
- G06F8/24—Object-oriented
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及一种前端网页输入约束提取方法和装置。该方法包括:标记前端网页的所有Javascript代码中包含出错信息的函数,作为目标函数;对标记的目标函数进行数据流分析,并根据数据流分析结果进行代码切片;将获得的切片代码与前端网页输入相匹配,提取出前端网页输入约束相关的Javascript验证代码。本发明能够从前端网页中提取Javascript验证代码,辅助Web应用服务化开发,从而保障Web应用后端数据安全;与现有静态分析方案相比,本发明通过以函数为单位缩小了分析范围,从而使本发明能够分析大型网站;与现有动态分析相比,本发明无需开发人员提供输入测试样例。
Description
技术领域
本发明属于网络技术、信息安全技术领域,具体涉及一种前端网页输入约束提取方法和装置。
背景技术
Web应用一般采用前后端分离设计,前端网页负责与用户交互,后端进行业务逻辑处理(如数据验证,数据库读写等)。但在实践中,由于应用与后端交互存在延迟,一般会在前端验证网页输入数据,典型如表单输入数据的验证。如今大型Web应用越来越多开放api接口,Web应用趋向于服务化,用户可以通过接口直接调用后端业务逻辑处理,不再经过传前端验证的步骤,这给Web应用后端数据安全带来了挑战。
Web应用前端即网页主要是通过HTML和Javascript语言实现。文档对象模型(DOM)是HTML的编程接口,它提供对文档的结构化描述,并定义了程序对该结构的访问方式。前端网页输入约束(Client-side input validation)是指使用Javascript在网页前端对用户输入数据进行判断和处理,对不符合要求的输入进行错误提示。Javascript通过DOM获取HTML中用户的输入,经过逻辑判断与处理,动态地改变网页地结构,样式和内容。因此提取前端网页输入约束主要关注于如何提取Javascript代码验证逻辑,并与前端网页输入相关联。现有的分析思路主要是通过数据流分析,跟踪需要关注的前端输入变量流向。现有的数据流分析方案主要有两种,一种是基于静态单赋值的静态分析,另一种是利用代码插桩动态跟踪所关注的前端网页输入数据。
第一种方案是使用静态单赋值,将原程序语句转换成一种中间形式,以使整个程序控制流图规模变小,从而使全程序的静态分析成为可能。但目前Web应用通常包含大量库,如JQuery等,当前的静态分析工具无法完整分析这种包含大型库的Web应用。
第二种方案是利用代码插桩动态跟踪所关注的数据。这种方案通常需要触发相关的Javascript代码,通过调用堆栈定位相关验证代码位置。如果希望找出当前页面所有输入相关联的约束代码,开发人员需要花费大量时间提供高覆盖率的测试样例。
发明内容
本发明旨在提供一种前端网页输入约束提取方法和装置,从前端网页中提取Javascript验证代码,辅助Web应用服务化开发,从而保障Web应用后端数据安全。
本发明采用的技术方案如下:
一种前端网页输入约束提取方法,包括以下步骤:
标记前端网页的所有Javascript代码中包含出错信息的函数,作为目标函数;
对标记的目标函数进行数据流分析,并根据数据流分析结果进行代码切片;
将获得的切片代码与前端网页输入相匹配,提取出前端网页输入约束相关的Javascript验证代码。
进一步地,标记所述目标函数的过程包括:
配置出错信息的特征关键字;
将输入Javascript代码转换成抽象语法树,然后按语句遍历抽象语法树;在遍历过程中对语句包含的对象变量名、对象方法名、函数调用名、函数参数名、函数参数常量字符串与所述特征关键字进行匹配,若语句包含所述特征关键字将被标记为潜在的出错函数,即目标函数。
进一步地,所述数据流分析,是将目标函数转换成抽象语法树,然后对抽象语法树进行数据流分析;所述数据流分析记录当前语句的定义变量、引用变量和所依赖的控制语句。
进一步地,所述代码切片,从被标记出错信息的语句开始,反向进行切片;切片过程维护一个相关变量列表P,初始化为被标记语句的引用变量集合;当一个语句的定义变量集合Q与P的交集不为空时,将此语句加入切片集合,并更新相关变量列表P;所述更新相关变量列表P,更新规则为去除Q与P交集元素,并加入Q中所有的引用变量集合。
进一步地,所述代码切片,当遇到已切片的程序所依赖的控制语句时,直接将该控制语句加入代码切片。
进一步地,所述将获得的切片代码与前端网页输入相匹配,是通过关联网页元素的id实现切片代码与前端网页输入的匹配。
进一步地,如果与网页输入相关变量的定义在当前切片代码的函数作用域之外,则通过从内向外扩张作用域的方式进行搜索,定位对应的网页输入相关变量。
一种前端网页输入约束提取装置,其特征在于,包括:
目标函数标记模块,负责标记前端网页的所有Javascript代码中包含出错信息的函数,作为目标函数;
代码切片模块,负责对标记的目标函数进行数据流分析,并根据数据流分析结果进行代码切片;
匹配模块,负责将获得的切片代码与前端网页输入相匹配,提取出前端网页输入约束相关的Javascript验证代码。
一种计算机,其包括存储器和处理器,所述存储器存储计算机程序,所述计算机程序被配置为由所述处理器执行,所述计算机程序包括用于执行本发明的前端网页输入约束提取方法中各步骤的指令。
本发明的有益效果如下:
本发明提供的前端网页输入约束提取方法,能够从前端网页中提取Javascript验证代码,辅助Web应用服务化开发,从而保障Web应用后端数据安全。与现有静态分析方案相比,本发明通过以函数为单位缩小了分析范围,从而使本发明能够分析大型网站。与现有动态分析相比,本发明无需开发人员提供输入测试样例。
附图说明
图1是提取前端网页输入约束的流程图。
图2是前端网页输入约束提取装置的模块组成图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面通过具体实施例和附图,对本发明做进一步详细说明。
本发明提出一种以函数为单位的静态分析方法,从而高效地提取前端网页输入约束相关的Javascript代码。图1是提取前端网页输入约束的流程图。主要包含三个步骤:1)标记目标函数;2)对标记的目标函数进行数据流分析、代码切片;3)关联网页输入与代码切片。
1)标记目标函数
基本思想是定位所有Javascript代码(即图1中的“JS资源”)中提示出错信息的函数,开发人员可以配置出错信息的特征关键字,程序将标记包含出错信息的函数作为数据流分析的基本单位。
“标记目标函数”的具体过程包括:首先将输入Javascript代码转换成抽象语法树,然后程序按语句遍历抽象语法树,在遍历过程中,对语句包含的对象变量名、对象方法名、函数调用名、函数参数名、函数参数常量字符串与特征关键字进行匹配,若语句包含相关特征关键字将被标记为潜在的出错函数。
2)对标记的目标函数进行数据流分析、代码切片
获得目标函数后,将目标函数转换成易于分析的抽象语法树。首先对抽象语法树进行数据流分析,由于此时分析目标为函数,不需要进行中间形式转换也可对程序控制流图进行分析。数据流分析主要记录当前语句的定义变量、引用变量和所依赖的控制语句。
代码切片的作用/目的是提取标记的目标函数中与被标记出错语句相关的代码。代码切片从被标记出错信息的语句开始,反向进行切片,切片过程维护一个相关变量列表P,初始化为被标记语句的引用变量集合。当一个语句的定义变量集合Q与P的交集不为空时,将此语句加入切片集合,并更新相关变量列表P,更新规则为去除Q与P交集元素,并加入Q中所有的引用变量集合。另外,当遇到已切片的程序所依赖的控制语句,直接将该控制语句加入代码切片。
下面举例说明“代码切片”的过程:
如上述代码所示,若第5行被标记为起始切片语句:
1.相关变量集合P初始化为{c};
2.第4行为控制语句,加入切片集合;
3.第3行定义变量集合Q为{c},与P相交不为空,因此加入切片集合,并且更新相关变量集合P,去除变量c,并加入Q中引用变量a,此时P为{a};
4.第2行定义变量集合Q为{b},与P不相交,因此不加入切片集合;
5.第1行规则同第3行,加入切片集合。
3)关联网页输入与代码切片
经过代码切片后,需要将切片代码与前端网页输入相匹配。基本思想是记录切片代码中对网页元素的访问,如前所述,Javascript通过DOM接口访问网页元素,具体到网页输入,Javascript将通过网页元素id来访问特定的网页输入。通过关联id可以实现切片代码与前端网页输入的匹配。具体匹配过程说明如下:记录切片代码中对DOM接口的访问,如getElementById等方法的调用,并将传入参数与页面输入元素id进行匹配,若能对应,说明该切片代码对应该输入元素。也即切片代码被关联到前端网页输入,然后归一化切片数据并存储。
此外,由于Javascript中的变量具有作用域,变量可以在内层作用域使用。因此与网页输入相关变量的定义可能在当前切片代码的函数作用域之外,此时将通过从内向外扩张作用域的方式进行搜索,定位对应的网页输入相关变量。
其中,“从内向外扩张作用域的方式进行搜索”的具体过程如下:
首先对抽象语法树进行一次遍历,记录所有函数中的嵌套关系,如A函数内定义了B函数,则在遍历B函数时在B函数的语法树中添加一个引用,指向其父亲节点A函数。
若该代码切片是在B函数内,而网页输入相关变量的定义在A函数中,则搜索时会沿着B的父亲节点(即A函数)往外搜索。
以上就是本发明创造技术方案的详细流程阐述。
本发明的技术方案也可以采用其它方式实现,比如:
在一个实施例中,提供一种前端网页输入约束提取装置,如图2所示,其包括:
目标函数标记模块,负责标记前端网页的所有Javascript代码中包含出错信息的函数,作为目标函数;
代码切片模块,负责对标记的目标函数进行数据流分析,并根据数据流分析结果进行代码切片;
匹配模块,负责将获得的切片代码与前端网页输入相匹配,提取出前端网页输入约束相关的Javascript验证代码。
在另一个实施例中,提供一种计算机/服务器,其包括存储器和处理器,所述存储器存储计算机程序,所述计算机程序被配置为由所述处理器执行,所述计算机程序包括用于执行本发明的前端网页输入约束提取方法中各步骤的指令。
在另一个实施例中,提供一种计算机可读存储介质(如ROM/RAM、磁盘、光盘),所述计算机可读存储介质存储计算机程序,所述计算机程序被计算机执行时,实现本发明的前端网页输入约束提取方法的步骤。
本发明中,代码切片部分还可以使用基于图的切片方式。即将所有语句作为点,依赖关系作为边(包括控制依赖、数据依赖),建立关系图,然后使用图搜索的方式找出某个点代表的语句相关的其他代码。这种方式可适用于所需切片代码量非常大并且需要多次对不同语句进行切片的情况,但需要预先建立关系图。
以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的原理和范围,本发明的保护范围应以权利要求书所述为准。
Claims (6)
1.一种前端网页输入约束提取方法,其特征在于,包括以下步骤:
标记前端网页的所有Javascript代码中包含出错信息的函数,作为目标函数;
对标记的目标函数进行数据流分析,并根据数据流分析结果进行代码切片;所述对标记的目标函数进行数据流分析,是将目标函数转换成抽象语法树,然后对抽象语法树进行数据流分析;所述数据流分析记录当前语句的定义变量、引用变量和所依赖的控制语句;所述根据数据流分析结果进行代码切片,从被标记出错信息的语句开始,反向进行切片;切片过程维护一个相关变量列表P,初始化为被标记语句的引用变量集合;当一个语句的定义变量集合Q与P的交集不为空时,将此语句加入切片集合,并更新相关变量列表P;所述更新相关变量列表P,更新规则为去除Q与P交集元素,并加入Q中所有的引用变量集合;
将获得的切片代码与前端网页输入相匹配,提取出前端网页输入约束相关的Javascript验证代码;所述将获得的切片代码与前端网页输入相匹配,是通过关联网页元素的id实现切片代码与前端网页输入的匹配,若能对应,说明切片代码对应前端网页输入,即切片代码被关联到前端网页输入。
2.根据权利要求1所述的方法,其特征在于,标记所述目标函数的过程包括:
配置出错信息的特征关键字;
将输入Javascript代码转换成抽象语法树,然后按语句遍历抽象语法树;在遍历过程中对语句包含的对象变量名、对象方法名、函数调用名、函数参数名、函数参数常量字符串与所述特征关键字进行匹配,若语句包含所述特征关键字将被标记为潜在的出错函数,即目标函数。
3.根据权利要求1所述的方法,其特征在于,进行代码切片的过程中,当遇到已切片的程序所依赖的控制语句时,直接将该控制语句加入切片集合。
4.根据权利要求1所述的方法,其特征在于,如果与网页输入相关变量的定义在当前切片代码的函数作用域之外,则通过从内向外扩张作用域的方式进行搜索,定位对应的网页输入相关变量。
5.一种采用权利要求1~4中任一权利要求所述方法的前端网页输入约束提取装置,其特征在于,包括:
目标函数标记模块,负责标记前端网页的所有Javascript代码中包含出错信息的函数,作为目标函数;
代码切片模块,负责对标记的目标函数进行数据流分析,并根据数据流分析结果进行代码切片;所述对标记的目标函数进行数据流分析,是将目标函数转换成抽象语法树,然后对抽象语法树进行数据流分析;所述数据流分析记录当前语句的定义变量、引用变量和所依赖的控制语句;所述根据数据流分析结果进行代码切片,从被标记出错信息的语句开始,反向进行切片;切片过程维护一个相关变量列表P,初始化为被标记语句的引用变量集合;当一个语句的定义变量集合Q与P的交集不为空时,将此语句加入切片集合,并更新相关变量列表P;所述更新相关变量列表P,更新规则为去除Q与P交集元素,并加入Q中所有的引用变量集合;
匹配模块,负责将获得的切片代码与前端网页输入相匹配,提取出前端网页输入约束相关的Javascript验证代码;所述将获得的切片代码与前端网页输入相匹配,是通过关联网页元素的id实现切片代码与前端网页输入的匹配,若能对应,说明切片代码对应前端网页输入,即切片代码被关联到前端网页输入。
6.一种计算机,其特征在于,其包括存储器和处理器,所述存储器存储计算机程序,所述计算机程序被配置为由所述处理器执行,所述计算机程序包括用于执行权利要求1~4中任一权利要求所述方法中各步骤的指令。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910731804.1A CN110618809B (zh) | 2019-08-08 | 2019-08-08 | 一种前端网页输入约束提取方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910731804.1A CN110618809B (zh) | 2019-08-08 | 2019-08-08 | 一种前端网页输入约束提取方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110618809A CN110618809A (zh) | 2019-12-27 |
CN110618809B true CN110618809B (zh) | 2020-11-03 |
Family
ID=68921700
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910731804.1A Active CN110618809B (zh) | 2019-08-08 | 2019-08-08 | 一种前端网页输入约束提取方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110618809B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101017458A (zh) * | 2007-03-02 | 2007-08-15 | 北京邮电大学 | 基于源代码静态分析的软件安全代码分析器及其检测方法 |
CN109101820A (zh) * | 2018-08-16 | 2018-12-28 | 北京理工大学 | 一种基于执行流图的Web应用安全漏洞预测方法 |
CN109657473A (zh) * | 2018-11-12 | 2019-04-19 | 华中科技大学 | 一种基于深度特征的细粒度漏洞检测方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090019313A1 (en) * | 2007-07-10 | 2009-01-15 | Ramesh Pokala | System and method for performing client-side input validation |
CN103559122B (zh) * | 2013-10-14 | 2016-04-27 | 西安交通大学 | 基于程序行为切片的测试案例约减方法 |
CN108170467B (zh) * | 2017-12-02 | 2021-04-13 | 西安财经学院 | 约束限定聚类和信息度量软件胎记特征选择方法、计算机 |
CN108694042B (zh) * | 2018-06-15 | 2021-08-31 | 福州大学 | 网页中的JavaScript代码解混淆方法 |
-
2019
- 2019-08-08 CN CN201910731804.1A patent/CN110618809B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101017458A (zh) * | 2007-03-02 | 2007-08-15 | 北京邮电大学 | 基于源代码静态分析的软件安全代码分析器及其检测方法 |
CN109101820A (zh) * | 2018-08-16 | 2018-12-28 | 北京理工大学 | 一种基于执行流图的Web应用安全漏洞预测方法 |
CN109657473A (zh) * | 2018-11-12 | 2019-04-19 | 华中科技大学 | 一种基于深度特征的细粒度漏洞检测方法 |
Non-Patent Citations (1)
Title |
---|
一种基于程序切片相似度匹配的脆弱性发现方法;刘强等;《计算机科学》;20190731;第6卷(第7期);第126-132页 * |
Also Published As
Publication number | Publication date |
---|---|
CN110618809A (zh) | 2019-12-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11138005B2 (en) | Methods and systems for automatically generating documentation for software | |
US9224103B1 (en) | Automatic annotation for training and evaluation of semantic analysis engines | |
EP3959599A1 (en) | Code completion for languages with hierarchical structures | |
CN111176650B (zh) | 解析器生成方法、检索方法、服务器及存储介质 | |
US20060200457A1 (en) | Extracting information from formatted sources | |
US11263062B2 (en) | API mashup exploration and recommendation | |
US20190146784A1 (en) | Documentation for version history | |
CN111831384A (zh) | 语言切换方法和装置、设备及存储介质 | |
EP3891599A1 (en) | Code completion of method parameters with machine learning | |
WO2023278052A1 (en) | Automated troubleshooter | |
CN111144070B (zh) | 一种文档解析翻译方法和装置 | |
CN108170661B (zh) | 一种规则文本的管理方法及系统 | |
CN106372232B (zh) | 基于人工智能的信息挖掘方法和装置 | |
CN109325217B (zh) | 一种文件转换方法、系统、装置及计算机可读存储介质 | |
US11500619B1 (en) | Indexing and accessing source code snippets contained in documents | |
Wong et al. | iSentenizer‐μ: Multilingual Sentence Boundary Detection Model | |
US20090182759A1 (en) | Extracting entities from a web page | |
CN109558580B (zh) | 一种文本分析方法及装置 | |
CN108008947B (zh) | 一种编程语句的智能提示方法、装置、服务器及存储介质 | |
CN110618809B (zh) | 一种前端网页输入约束提取方法和装置 | |
CN110705285A (zh) | 一种政务文本主题词库构建方法、装置、服务器及可读存储介质 | |
Rakhimova et al. | Complex technology of machine translation resources extension for the Kazakh language | |
CN113901219A (zh) | 一种基于意图识别的数据分析方法及系统 | |
US10713329B2 (en) | Deriving links to online resources based on implicit references | |
US20090217156A1 (en) | Method for Storing Localized XML Document Values |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |