首页> 中国专利> 基于函数访问全局变量的防御性编程方法

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

摘要

一种基于函数访问全局变量的防御性编程方法,其特征是它包括(1)全局变量名称隐藏即在被引用的头文件中不出现被保护的全局变量的声明,并将定义文件作为二进制文件提供或通过编程规范文件规定头文件声明以外的名称不可被使用即完成了全局变量名称的隐藏;(2)全局变量访问函数和全局变量数据结构的声明即在头文件中声明全局变量的数据结构和全局变量的访问函数,并在全局变量数据结构中加入互斥锁,将获取函数与修改函数分开声明;(3)定义全局变量访问函数是指在全局变量访问函数的定义阶段选择断言防御或其它已有函数防御方法、编程密码防御、访问上下文防御和互斥防御。本发明可防止编程中访问错误的全局变量,并实现不同权限的全局变量访问;并能自动判断上下文屏蔽无权访问该全局变量的任务访问。

著录项

  • 公开/公告号CN101807157A

    专利类型发明专利

  • 公开/公告日2010-08-18

    原文格式PDF

  • 申请/专利权人 南京恩瑞特实业有限公司;

    申请/专利号CN201010135876.9

  • 发明设计人 束元;蔡李峰;朱骞;

    申请日2010-03-30

  • 分类号G06F9/45;

  • 代理机构南京天华专利代理有限责任公司;

  • 代理人徐冬涛

  • 地址 211110 江苏省南京市江宁开发区将军大道39号

  • 入库时间 2023-12-18 00:39:50

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2012-08-29

    授权

    授权

  • 2010-10-06

    实质审查的生效 IPC(主分类):G06F9/45 申请日:20100330

    实质审查的生效

  • 2010-08-18

    公开

    公开

说明书

技术领域

本发明涉及一种计算机程序的安全方法,尤其是一种在有防御性编程要求的软件中使用的一种安全防御方法,具体地说是一种基于函数访问全局变量的防御性编程方法。

背景技术

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

发明内容

本发明的目的是针对现有的防御编程方法大多忽略了全局变量造成的安全问题,设计一种基于函数访问全局变量的防御性编程方法。

本发明的技术方案是:

一种基于函数访问全局变量的防御性编程方法,其特征是它包括以下三个方面:全局变量名称隐藏,全局变量访问函数和全局变量数据结构的声明,定义全局变量访问函数;所述的全局变量名称隐藏是指在被引用的头文件中不出现被保护的全局变量的声明,并将定义文件作为二进制文件提供或通过编程规范文件规定头文件声明以外的名称不可被使用即完成了全局变量名称的隐藏;所述的全局变量访问函数和全局变量数据结构的声明是指在头文件中声明全局变量的数据结构和全局变量的访问函数,并在全局变量数据结构中加入互斥锁,将获取函数与修改函数分开声明;所述的定义全局变量访问函数是指在全局变量访问函数的定义阶段选择断言防御或其它已有函数防御方法、编程密码防御、访问上下文防御和互斥防御。

定义全局变量访问函数时所采用的防御包括全局变量的获取和修改编程密码保护防御、全局变量的上下文访问控制防御和全局变量的互斥访问控制防御。

本发明的有益效果:

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(GETKEYERROR)

}

if(上下文判断失败)//对访问上下文防御

{

     return(CONTEXTERROR)

}

if(global_val_real.locked==TRUE)//互斥防御

{

     return(LOCKED)

}

     global_val_real.locked=TRUE

     global_varp->var_char=global_val_real.var_char

     global_varp->var_int=global_val_real.var_int

     global_varp->var_intp=global_val_real.var_intp

     ……

     global_val_real.locked=FALSE

  return(OK)

}

result global_var_set(int key,global_var_struct global_var)

{

  [assert()]//断言防御或其它已有函数防御方法

  if(key!=GLOBAL_VAR_GETKEY)//对该全局变量修改加编程密

  {

    return(SETKEYERROR)

  }

  if(上下文判断失败)//对访问上下文防御

  {

    return(CONTEXTERROR)

}

if(global_val_real.locked==TRUE)//互斥防御

{

       return(LOCKED)

}

       global_val_real.locked=TRUE

       global_var_real.var_char=global_val.var_char

       global_var_real.var_int=global_val.var_int

       global_var_real.var_intp=global_val.var_intp

       ……

       global_val_real.locked=FALSE

    return(OK)

}

本发明未涉及部分均与现有技术相同或可采用现有技术加以实现。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号