基于函数访问全局变量的防御性编程方法

文档序号:6430452阅读:159来源:国知局
专利名称:基于函数访问全局变量的防御性编程方法
技术领域
本发明涉及一种计算机程序的安全方法,尤其是一种在有防御性编程要求的软件 中使用的一种安全防御方法,具体地说是一种基于函数访问全局变量的防御性编程方法。
背景技术
众所周知,防御性编程是一种细致、谨慎的编程方法。为了开发可靠的软件,需要 设计系统中的每个组件,以使其尽可能地“保护”自己。通过明确地在代码中对设想错误进 行检查,防御设想错误的发生。这种努力防止(至少是察觉)代码被可能错误的行为方式 调用时产生不确定的结果。防御性编程可以尽早发现较小的问题,而不是等到它们发展成 大的灾难的时候才发现。当然,防御性编程并不能排除所有的程序错误。但是问题所带来 的麻烦将会减少,并易于修改。防御性编程是一种防卫方式,而不是一种补救形式。目前常 用的防御性编程方法注重对函数体的防御,但在编程中不可避免地要使用到全局变量。如 果只保护了函数体而忽视了调用全局变量时的防御措施,就在防御体系上出现了短板。

发明内容
本发明的目的是针对现有的防御编程方法大多忽略了全局变量造成的安全问题, 设计一种基于函数访问全局变量的防御性编程方法。本发明的技术方案是一种基于函数访问全局变量的防御性编程方法,其特征是它包括以下三个方面 全局变量名称隐藏,全局变量访问函数和全局变量数据结构的声明,定义全局变量访问函 数;所述的全局变量名称隐藏是指在被引用的头文件中不出现被保护的全局变量的声明, 并将定义文件作为二进制文件提供或通过编程规范文件规定头文件声明以外的名称不可 被使用即完成了全局变量名称的隐藏;所述的全局变量访问函数和全局变量数据结构的声 明是指在头文件中声明全局变量的数据结构和全局变量的访问函数,并在全局变量数据结 构中加入互斥锁,将获取函数与修改函数分开声明;所述的定义全局变量访问函数是指在 全局变量访问函数的定义阶段选择断言防御或其它已有函数防御方法、编程密码防御、访 问上下文防御和互斥防御。定义全局变量访问函数时所采用的防御包括全局变量的获取和修改编程密码保 护防御、全局变量的上下文访问控制防御和全局变量的互斥访问控制防御。本发明的有益效果1.通过全局变量访问密码与访问函数的一致性管理,防止了编程中访问错误的全
局变量。2.通过区别获取和修改全局变量的访问密码,做到不同权限的全局变量访问。3.通过上下文访问控制防御可以在多任务系统中通过判断上下文屏蔽无权访问 该全局变量的任务访问。4.通过互斥访问控制防御可以确保该全局变量被访问过程的原子性。
具体实施方式

下面结合实施例对本发明作进一步的说明。一种基于函数访问全局变量的防御性编程方法,结合已有的防御性编程方法对软 件进行更全面的防御,它还可以通过使用函数的防御性编程方法对全局变量进行防御,具 体步骤包括隐藏全局变量名称、封装全局变量访问函数接口和全局变量访问函数的防御功 能,分别按下述方法实现(1).隐藏全局变量名称;在被引用的头文件中不出现被保护的全局变量的声明, 并将定义文件作为二进制文件提供或通过编程规范文件规定头文件声明以外的名称不可 被使用即完成了全局变量名称的隐藏。(2).封装全局变量访问函数接口,包括全局变量数据结构和访问函数的声明;如 头文件关键内容所示,在头文件中声明全局变量的数据结构和全局变量的访问函数,建议 在全局变量数据结构中加入互斥锁,建议将获取函数(如global_Var_get)与修改函数 (如 global_var_set)分开声明。(3).全局变量访问函数的防御功能1 全局变量的获取和修改编程密码保护防 御;如断言防御或其它已有函数防御方法、编程密码防御等;(4).全局变量访问函数的防御功能2 全局变量的上下文访问控制防御;(5).全局变量访问函数的防御功能3 全局变量的互斥访问控制防御。以下是一个具体的对全局变量实现防御的软件头文件关键内容typedef struct{BOOL locked ;//访问互斥锁char var_char ;int var_int ;int*var_intp ;......} global_Var_StruCt ;//全局变量数据结构声明extern result global_var_get (int, global_var_struct*);extern result global_var_set (int, global_var_struct);定义文件关键内容global_val_struct global_val_real ;result global_var_get(int key, global_var_struct氺global—varp){[assert ()]//断言防御或其它已有函数防御方法if (key ! = GLOBAL_VAR_GETKEY)//对该全局变量获取加编程密码{return(GETKEYERR0R)
}if (上下文判断失败)//对访问上下文防御{return(C0NTEXTERR0R)}if (global_val_real. locked = = TRUE) // 互斥防御{return(LOCKED)}global_val_real. locked = TRUEglobal_varp- > var_char = global_val_real. var_charglobal_varp- > var_int = global_val_real. var_intglobal_varp- > var_intp = global_val_real. var_intp......global_val_real. locked = FALSEreturn (OK)}result global_var_set(int key, global_var_struct global_var){[assert ()]//断言防御或其它已有函数防御方法if (key ! = GL0BAL_VAR_GETKEY)//对该全局变量修改加编程密码{return(SETKEYERR0R)}if (上下文判断失败)//对访问上下文防御{return(C0NTEXTERR0R)}if (global_val_real. locked = = TRUE) // 互斥防御{return(LOCKED)}global_val_real. locked = TRUEglobal_var_real. var_char = global_val. var_charglobal_var_real. var_int = global_val. var_intglobal_var_real. var_intp = global_val. var_intp......global_val_real. locked = FALSE<formula>formula see original document page 6</formula>
本发明未涉及部分均与现有技术相同或可采用现有技术加以实现。
权利要求
一种基于函数访问全局变量的防御性编程方法,其特征是它包括以下三个方面全局变量名称隐藏,全局变量访问函数和全局变量数据结构的声明,定义全局变量访问函数;所述的全局变量名称隐藏是指在被引用的头文件中不出现被保护的全局变量的声明,并将定义文件作为二进制文件提供或通过编程规范文件规定头文件声明以外的名称不可被使用即完成了全局变量名称的隐藏;所述的全局变量访问函数和全局变量数据结构的声明是指在头文件中声明全局变量的数据结构和全局变量的访问函数,并在全局变量数据结构中加入互斥锁,将获取函数与修改函数分开声明;所述的定义全局变量访问函数是指在全局变量访问函数的定义阶段选择断言防御或其它已有函数防御方法、编程密码防御、访问上下文防御和互斥防御。
2.根据权利要求1所述的基于函数访问全局变量的防御性编程方法,其特征是定义全 局变量访问函数时所采用的防御包括全局变量的获取和修改编程密码保护防御、全局变量 的上下文访问控制防御和全局变量的互斥访问控制防御。
全文摘要
一种基于函数访问全局变量的防御性编程方法,其特征是它包括(1)全局变量名称隐藏即在被引用的头文件中不出现被保护的全局变量的声明,并将定义文件作为二进制文件提供或通过编程规范文件规定头文件声明以外的名称不可被使用即完成了全局变量名称的隐藏;(2)全局变量访问函数和全局变量数据结构的声明即在头文件中声明全局变量的数据结构和全局变量的访问函数,并在全局变量数据结构中加入互斥锁,将获取函数与修改函数分开声明;(3)定义全局变量访问函数是指在全局变量访问函数的定义阶段选择断言防御或其它已有函数防御方法、编程密码防御、访问上下文防御和互斥防御。本发明可防止编程中访问错误的全局变量,并实现不同权限的全局变量访问;并能自动判断上下文屏蔽无权访问该全局变量的任务访问。
文档编号G06F9/45GK101807157SQ20101013587
公开日2010年8月18日 申请日期2010年3月30日 优先权日2010年3月30日
发明者朱骞, 束元, 蔡李峰 申请人:南京恩瑞特实业有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1