CN111984243A - 一种基于注解的通用安全检查及功能扩展方法及装置 - Google Patents
一种基于注解的通用安全检查及功能扩展方法及装置 Download PDFInfo
- Publication number
- CN111984243A CN111984243A CN202010901066.3A CN202010901066A CN111984243A CN 111984243 A CN111984243 A CN 111984243A CN 202010901066 A CN202010901066 A CN 202010901066A CN 111984243 A CN111984243 A CN 111984243A
- Authority
- CN
- China
- Prior art keywords
- annotation
- program
- source code
- security check
- analyzer
- 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
- 238000000034 method Methods 0.000 title claims abstract description 60
- 238000004458 analytical method Methods 0.000 claims abstract description 41
- 230000006870 function Effects 0.000 claims description 28
- 238000004364 calculation method Methods 0.000 claims description 3
- 238000012795 verification Methods 0.000 claims description 3
- 230000003111 delayed effect Effects 0.000 claims description 2
- 238000011161 development Methods 0.000 abstract description 2
- 238000012546 transfer Methods 0.000 description 6
- 230000008569 process Effects 0.000 description 5
- 239000011800 void material Substances 0.000 description 4
- OTMSDBZUPAUEDD-UHFFFAOYSA-N Ethane Chemical group CC OTMSDBZUPAUEDD-UHFFFAOYSA-N 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000007689 inspection Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000001788 irregular Effects 0.000 description 1
- 239000003607 modifier Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/166—Editing, e.g. inserting or deleting
- G06F40/169—Annotation, e.g. comment data or footnotes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/436—Semantic checking
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- General Health & Medical Sciences (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请公开了一种基于注解的通用安全检查及功能扩展方法及装置。所述方法包括:对源代码或程序进行统一规范注解,并且在编译之前使用注解分析器对源代码或者程序进行分析,若分析结果符合所述统一规范注解,则将所述源代码或者程序进行编译,若分析结果不符合所述统一规范注解,则发出注解错误信息,重新进行源代码或者程序的编辑。所述装置包括:注解模块和注解分析器;本申请有效降低了源代码或程序的开发成本,在安全性方面,对系统中的源程序或者代码提供统一的安全检查范式,避免了因缺少统一标准的安全性检查,造成安全性得不到有效保障的问题;同时,本申请也可以作为一种源代码或者程序功能扩展的方法。
Description
技术领域
本申请涉及计算机技术领域,具体而言,涉及一种基于注解的通用安全检查及功能扩展方法及装置。
背景技术
目前,在程序开发过程中,传统语言的开放性导致其在安全性上有很大的自由度,程序的安全性多由开发者来保证。且不同语言的语法差异较大,故现有技术中程序的安全性检查及其他通用扩展功能多使用自定义的方式实现。这导致了不同的开发者采用不同的规则和策略,没有一种统一的规范,所规定的策略也是良莠不齐,安全性得不到有效地保障。
现急需一种标准的通用安全检查及功能扩展方法,以解决相关技术中缺少统一标准的安全性检查,造成安全性得不到有效保障的问题。
发明内容
本申请的主要目的在于提供一种基于注解的通用安全检查及功能扩展方法及装置,以解决相关技术中缺少统一标准的安全性检查,造成安全性得不到有效保障的问题。
为了实现上述目的,一方面本申请提供了一种基于注解的通用安全检查及功能扩展方法,包括:对源代码或程序进行统一规范注解,并且在编译之前使用注解分析器对源代码或者程序进行分析,若分析结果符合所述统一规范注解,则将所述源代码或者程序进行编译,若分析结果不符合所述统一规范注解,则发出注解错误信息,重新进行源代码或者程序的编辑。
所述注解包括:为所述源代码或者程序元素设置元数据(MetaData)信息,注解以字符@开头,注解名称为所述源代码或者程序合法的标识符,注解需放在注释内。
所述注解能够使用参数,参数以key/value键值对的形式传递。
所述注解规定的调用规范如下:
/*
*注解验证逻辑
*/
bool validate_annotation(…);
所有注解必须满足所述规范。
所述注解分为四种类型:
参数限定、方法行为限定、规定输入输出参数、其他附加功能。
所述参数限定用来限定方法的操作对象。
所述方法行为限定用来限定方式不可以执行哪些操作。
所述规定输入输出参数,利用输入输出参数向源代码或者程序输入外部参数,或者将源代码或者程序计算结果暴露给外部对象。
所述其他附加功能,包括:延迟任务、定时任务、持久化到链上。
所述注解分析器实现流程如下:
读取源代码或程序,进行词法分析。
对词法分析的结果进行语法分析,找出注解,并生成注解抽象语法树。
对注解抽象语法树进行语义分析;
将语义分析结果输入注解分析器,判断是否合乎统一规范;
若不符合统一规范,则发出注解错误信息,重新进行源代码或者程序的编辑。
若符合统一规范,则将所述源代码或者程序进行编译。
另一方面本申请提供了一种基于注解的通用安全检查及功能扩展装置,采用一种基于注解的通用安全检查及功能扩展方法实现,包括:注解模块和注解分析器;
所述注解模块和注解分析器,依次顺序连接;
所述注解模块,用于对源代码或程序进行统一规范注解;
所述注解分析器,用于在编译之前使用注解分析器对源代码或者程序进行分析,若分析结果符合所述统一规范注解,则将所述源代码或者程序进行编译,若分析结果不符合所述统一规范注解,则发出注解错误信息,重新进行源代码或者程序的编辑。
有益技术效果:
本申请提供了一种通用的安全性检查及功能扩展的方法,有效降低了源代码或程序的开发成本;在安全性方面,可以对系统中的源程序或者代码提供统一的安全检查范式,避免了因缺少统一标准的安全性检查,造成安全性得不到有效保障的问题;同时,本申请也可以作为一种源代码或者程序功能扩展的方法。
附图说明
构成本申请的一部分的附图用来提供对本申请的进一步理解,使得本申请的其它特征、目的和优点变得更明显。本申请的示意性实施例附图及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是根据本申请实施例提供的一种基于注解的通用安全检查及功能扩展方法流程图;
图2是根据本申请实施例提供的注解分析器实现过程流程图;
图3是根据本申请实施例提供的一种基于注解的通用安全检查及功能扩展装置示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
在本申请中,术语“上”、“下”、“左”、“右”、“前”、“后”、“顶”、“底”、“内”、“外”、“中”、“竖直”、“水平”、“横向”、“纵向”等指示的方位或位置关系为基于附图所示的方位或位置关系。这些术语主要是为了更好地描述本申请及其实施例,并非用于限定所指示的装置、元件或组成部分必须具有特定方位,或以特定方位进行构造和操作。
并且,上述部分术语除了可以用于表示方位或位置关系以外,还可能用于表示其他含义,例如术语“上”在某些情况下也可能用于表示某种依附关系或连接关系。对于本领域普通技术人员而言,可以根据具体情况理解这些术语在本申请中的具体含义。
另外,术语“多个”的含义应为两个以及两个以上。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
本申请提供了一种基于注解的通用安全检查及功能扩展方法,如图1所示,包括:
步骤S1:对源代码或程序进行统一规范注解;
步骤S2:在编译之前使用注解分析器对源代码或者程序进行分析;
步骤S3:判断分析结果是否符合所述统一规范注解;
步骤S4:若分析结果符合所述统一规范注解,则将所述源代码或者程序进行编译;
步骤S5:若分析结果不符合所述统一规范注解,则发出注解错误信息,重新进行源代码或者程序的编辑。
所述注解包括:为所述源代码或者程序元素设置元数据(MetaData)信息,注解以字符@开头,注解名称为所述源代码或者程序合法的标识符,注解需放在注释内。
所述注解能够使用参数,参数以key/value键值对的形式传递。
所述注解规定的调用规范如下:
/*
*注解验证逻辑
*/
bool validate_annotation(…);
所有注解必须满足所述规范。
注解,又称标注,是一种应用于类、方法、参数、变量、构造器等中的特殊修饰符,利用注解可以为程序元素设置元数据(MetaData)信息。本方案利用注解为源代码或者程序方法添加元数据信息。编译时,源代码或者程序注解分析器利用解析到的元数据信息,对源代码或者程序方法进行分,以确定方法或者参数符合对应的统一规范。
一个合法的注解以字符@开头,注解名称为所述源代码或者程序合法的标识符。如对于C++语言而言,注解名称需由字母、数字和下划线组成,其中必须以字母或下划线开头。
为了不对程序本身产生污染,注解需放在注释内。如:
/*
*@demo
*/
void demo_method(string,asset);
方法demo_method使用了@demo注解,@demo的行为由开发者自行实现,只需符合源代码或者程序注解分析器的调用规范即可。源代码或者程序注解分析器会检查demo_method方法,确保其符合注解定义。
注解可以使用参数,参数以key/value键值对的形式传递。如@demo(name=“Ethan”),将字符串“Ethan”以名字“name”传递给注解@demo。
所述注解分为四种类型:
参数限定、方法行为限定、规定输入输出参数、其他附加功能。
所述参数限定用来限定方法的操作对象。如资产操作过程中,定义注解@payable和资产对象daige::asset,限定资产操作必须使用资产对象asset,而不是double或者其他类型,来进行资产运行期的额外检查。
对于以下两个实现转账功能的方法transfer和transfer2,transfer使用double类型指定金额,transfer2使用daige::asset对象指定转账金额。两个方法都使用了@payable注解。
/*
*@payable
*/
void transfer(std::string,std::string,double);
/*
*@payable
*/
void transfer2(std::string,std::string,daige::asset);
对于方法transfer1,由于其金额对象为double类型,注解分析器会提示开发者,使用了不签当的对象并给出错误提示信息。
所述方法行为限定用来限定方式不可以执行哪些操作。如资产操作过程中,定义注解@nopayable,限定源代码或者程序方法不可以执行资产转移操作。
/*
*@nopayable
*/
void query_account(std::string);
方法query_account使用了@nopayable注解。编译时,注解分析器会检查方法中是否操作了资产对象。若操作了资产对象,则会给出错误提示信息。
所述规定输入输出参数,利用输入输出参数向源代码或者程序输入外部参数,或者将源代码或者程序计算结果暴露给外部对象。
所述其他附加功能,包括:如
a.@delay-延迟任务。
b.@scheduler-定时任务。
c.@table-持久化到链上。
所述注解分析器,注解分析器是一套独立的处理程序。在对源代码或者程序进行编译时,首先使用注解分析器对源代码或者程序中含有注解的方法进行解析,分析其是否符合统一规范。如图2所示,实现流程如下:
步骤S101:读取源代码或程序,进行词法分析。所述词法分析是利用语言的词法分析器从左到右扫描每行源程序的符号,并将字符流分割为token(token就是源文件中不可再进一步分割的字符串)。词法分析的方法可采取直接扫描法或者有限状态自动机实现。
步骤S102:对词法分析的结果进行语法分析,找出注解,并生成注解抽象语法树。所述语法分析要判断给定的句子是否符合语法结构,还要分析出该句子符合哪些结构。该过程可以采用一些通用的分析算法实现,如自顶向下分析算法,递归下降分析算法,LL(1)分析算法等。
步骤S103:对注解抽象语法树进行语义分析;
步骤S104:将语义分析结果输入注解分析器,判断是否合乎统一规范;
步骤S105:若不符合统一规范,则发出注解错误信息,重新进行源代码或者程序的编辑。
步骤S106:若符合统一规范,则将所述源代码或者程序进行编译。
另一方面本申请提供了一种基于注解的通用安全检查及功能扩展装置,采用一种基于注解的通用安全检查及功能扩展方法实现,如图3所示,包括:注解模块和注解分析器;
所述注解模块和注解分析器,依次顺序连接;
所述注解模块,用于对源代码或程序进行统一规范注解;
所述注解分析器,用于在编译之前使用注解分析器对源代码或者程序进行分析,若分析结果符合所述统一规范注解,则将所述源代码或者程序进行编译,若分析结果不符合所述统一规范注解,则发出注解错误信息,重新进行源代码或者程序的编辑。
本申请利用注解(annotation)对源代码或者程序中的方法进行标注。编译时,生成额外的注解抽象语法树,并在语义分析阶段分析代码是否符合统一规范。若不符合统一规范,则发出相应的编译错误信息。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (10)
1.一种基于注解的通用安全检查及功能扩展方法,其特征在于,包括:
对源代码或程序进行统一规范注解,并且在编译之前使用注解分析器对源代码或者程序进行分析,若分析结果符合所述统一规范注解,则将所述源代码或者程序进行编译,若分析结果不符合所述统一规范注解,则发出注解错误信息,重新进行源代码或者程序的编辑。
2.如权利要求1所述的基于注解的通用安全检查及功能扩展方法,其特征在于,所述注解包括:为所述源代码或者程序元素设置元数据信息,注解以字符@开头,注解名称为所述源代码或者程序合法的标识符,注解需放在注释内。
3.如权利要求1所述的基于注解的通用安全检查及功能扩展方法,其特征在于,所述注解能够使用参数,参数以key/value键值对的形式传递。
4.如权利要求1所述的基于注解的通用安全检查及功能扩展方法,其特征在于,所述注解规定的调用规范如下:
/*
*注解验证逻辑
*/
bool validate_annotation(…);
所有注解必须满足所述规范。
5.如权利要求1所述的基于注解的通用安全检查及功能扩展方法,其特征在于,所述注解分为四种类型:
参数限定、方法行为限定、规定输入输出参数、其他附加功能。
6.如权利要求5所述的基于注解的通用安全检查及功能扩展方法,其特征在于,所述参数限定用来限定方法的操作对象;
所述方法行为限定用来限定方式不可以执行哪些操作。
7.如权利要求5所述的基于注解的通用安全检查及功能扩展方法,其特征在于,所述规定输入输出参数,利用输入输出参数向源代码或者程序输入外部参数,或者将源代码或者程序计算结果暴露给外部对象。
8.如权利要求5所述的基于注解的通用安全检查及功能扩展方法,其特征在于,所述其他附加功能,包括:延迟任务、定时任务、持久化到链上。
9.如权利要求1所述的基于注解的通用安全检查及功能扩展方法,其特征在于,所述注解分析器实现流程如下:
读取源代码或程序,进行词法分析;
对词法分析的结果进行语法分析,找出注解,并生成注解抽象语法树;
对注解抽象语法树进行语义分析;
将语义分析结果输入注解分析器,判断是否合乎统一规范;
若不符合统一规范,则发出注解错误信息,重新进行源代码或者程序的编辑;
若符合统一规范,则将所述源代码或者程序进行编译。
10.一种基于注解的通用安全检查及功能扩展装置,其特征在于,采用如权利要求1-9所述的基于注解的通用安全检查及功能扩展方法实现,包括:
注解模块和注解分析器;所述注解模块和注解分析器,依次顺序连接;
所述注解模块,用于对源代码或程序进行统一规范注解;
所述注解分析器,用于在编译之前使用注解分析器对源代码或者程序进行分析,若分析结果符合所述统一规范注解,则将所述源代码或者程序进行编译,若分析结果不符合所述统一规范注解,则发出注解错误信息,重新进行源代码或者程序的编辑。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010901066.3A CN111984243A (zh) | 2020-08-31 | 2020-08-31 | 一种基于注解的通用安全检查及功能扩展方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010901066.3A CN111984243A (zh) | 2020-08-31 | 2020-08-31 | 一种基于注解的通用安全检查及功能扩展方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111984243A true CN111984243A (zh) | 2020-11-24 |
Family
ID=73447262
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010901066.3A Pending CN111984243A (zh) | 2020-08-31 | 2020-08-31 | 一种基于注解的通用安全检查及功能扩展方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111984243A (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100325620A1 (en) * | 2009-06-20 | 2010-12-23 | Microsoft Corporation | Embedded annotation and program analysis |
CN104050085A (zh) * | 2014-06-25 | 2014-09-17 | 北京思特奇信息技术股份有限公司 | 一种代码规范强制检查方法及系统 |
CN104123273A (zh) * | 2014-07-24 | 2014-10-29 | 扬州大学 | 一种面向对象程序的注释质量评价和注释建议方法 |
CN107256160A (zh) * | 2017-06-12 | 2017-10-17 | 郑州云海信息技术有限公司 | 一种持续集成中的代码文档生成方法、装置及系统 |
CN107741847A (zh) * | 2017-10-11 | 2018-02-27 | 江苏千米网络科技股份有限公司 | 实现领域驱动模型的方法及装置 |
CN110275713A (zh) * | 2019-07-02 | 2019-09-24 | 四川长虹电器股份有限公司 | 一种Java虚拟机后端编译的改进方法 |
CN110716715A (zh) * | 2019-10-18 | 2020-01-21 | 恒生电子股份有限公司 | 一种应用程序开发方法、装置、设备及介质 |
-
2020
- 2020-08-31 CN CN202010901066.3A patent/CN111984243A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100325620A1 (en) * | 2009-06-20 | 2010-12-23 | Microsoft Corporation | Embedded annotation and program analysis |
CN104050085A (zh) * | 2014-06-25 | 2014-09-17 | 北京思特奇信息技术股份有限公司 | 一种代码规范强制检查方法及系统 |
CN104123273A (zh) * | 2014-07-24 | 2014-10-29 | 扬州大学 | 一种面向对象程序的注释质量评价和注释建议方法 |
CN107256160A (zh) * | 2017-06-12 | 2017-10-17 | 郑州云海信息技术有限公司 | 一种持续集成中的代码文档生成方法、装置及系统 |
CN107741847A (zh) * | 2017-10-11 | 2018-02-27 | 江苏千米网络科技股份有限公司 | 实现领域驱动模型的方法及装置 |
CN110275713A (zh) * | 2019-07-02 | 2019-09-24 | 四川长虹电器股份有限公司 | 一种Java虚拟机后端编译的改进方法 |
CN110716715A (zh) * | 2019-10-18 | 2020-01-21 | 恒生电子股份有限公司 | 一种应用程序开发方法、装置、设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7788640B2 (en) | Using code analysis to generate documentation | |
Harel et al. | Modeling languages: Syntax, semantics and all that stu | |
US9823902B2 (en) | Editing source code | |
Glässer et al. | The formal semantics of SDL-2000: status and perspectives | |
Kästner et al. | Guaranteeing syntactic correctness for all product line variants: A language-independent approach | |
CN108595171B (zh) | 对象的模型生成方法、装置、设备及存储介质 | |
US20060230393A1 (en) | Universal string analyzer and method thereof | |
Tisi et al. | Improving higher-order transformations support in ATL | |
US5949993A (en) | Method for the generation of ISA simulators and assemblers from a machine description | |
US9715372B2 (en) | Executable guidance experiences based on implicitly generated guidance models | |
Fiuczynski et al. | Patch (1) Considered Harmful. | |
Butting et al. | Deriving fluent internal domain-specific languages from grammars | |
CN111984244A (zh) | 具有智能合约注解分析器的在线ide的实现方法及系统 | |
Dalibor et al. | Mind the gap: lessons learned from translating grammars between MontiCore and Xtext | |
CN111984243A (zh) | 一种基于注解的通用安全检查及功能扩展方法及装置 | |
Youn et al. | Bringing the WebAssembly Standard up to Speed with SpecTec | |
Harris et al. | Generation of Verification Artifacts from Natural Language Descriptions | |
Lämmel et al. | A story of a domain-specific language | |
Tselikis | Introduction to C++ | |
Hoff | C++ coding standard | |
David | Attribute grammars for C++ disambiguation | |
Parsa | Automatic Refactoring | |
Bertolotti et al. | The Journal of Systems & Software | |
Brucker et al. | Isabelle/DOF. User and Implementation Manual (2019) | |
Németh et al. | Defining c preprocessor macro libraries with functional programs |
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 |