应用程序审计的数据处理方法、装置和系统的制作方法_4

文档序号:9523967阅读:来源:国知局
,从而达 到了滤除误报的审计结果的目的。由于预设注释信息仅仅是作为应用程序的源代码的注 释,并不是应用程序本身的一部分,因此,即使应用程序的源代码经过混淆处理、某个变量 名更改或者方法名更改,并不会修改预设注释信息,该预设注释信息依然能够表征该注释 范围内的源代码对应的审计结果为误报的结果,即滤除带有预设注释信息的源代码对应的 审计结果不依赖于应用程序本身。综上,通过上述实施例,能够解决现有技术中滤除审计结 果中的误报结果不准确的问题,从而达到了提高滤除审计结果中的误报结果的准确性的效 果。
[0123] 如图3所示,应用程序在经过静态审计系统审计之后输出原始审计结果,再将原 始审计结果输入到应用程序注释模块中,经过注释后的应用程序二次提交到静态审计系统 中进行检查,并输出二次审计结果,对二次审计结果中的误报结果进行过滤之后,输出非误 报审计结果。
[0124] 对二次审计结果中的误报结果进行过滤,即通过如图7所示的滤除单元66滤除带 有预设注释信息的源代码对应的审计结果,得到非误报审计结果,其中,该滤除单元66包 括第一获取模块662、审计模块664、判断模块666和滤除模块668。
[0125] 第一获取模块662用于获取注释后的应用程序的源代码。经过应用程序注释模块 注释后的应用程序被提交到静态审计系统中再次进行审计,如果静态审计系统接收到的数 据包为应用程序的源代码,则直接对源代码进行审计;如果静态审计系统接收到的数据包 为应用程序包,并非源代码,则通过解包和反编译等手段将应用程序包转换为应用程序源 代码,W便于静态审计系统对应用程序的源代码进行审计。
[0126] 审计模块664用于对注释后的应用程序的源代码进行静态审计,得到二次审计结 果。
[0127] 对注释后的应用程序的源代码进行静态审计,再次对应用程序的源代码进行静态 审计的方法与首次进行静态审计的方法相同,只是再次进行静态审计的源代码为带有预设 注释信息的源代码,经过静态审计后得到二次审计结果。
[0128] 判断模块666用于判断二次审计结果对应的应用程序的源代码中是否具有预设 注释信息。
[0129] 获取二次审计结果中每条审计结果对应的应用程序的源代码,并判断二次审计结 果对应的源代码中是否具有预设注释信息。
[0130] 滤除模块668用于在二次审计结果对应的应用程序的源代码中具有预设注释信 息时,滤除具有预设注释信息的应用程序的源代码对应的二次审计结果,将滤除具有预设 注释信息的应用程序的源代码对应的二次审计结果后的审计结果作为非误报审计结果。
[0131]例如,二次审计结果中审计结果为al.java:L10:test( "helloworld"),该条 审计结果对应的源代码内容具有预设注释信息@JgMethod化ecked(author= 1,date =',2014-05-22',,type=',https-check',,comment=',checked,issecurity',),贝 滤除上述审计结果al.java:L10:test( "helloworld"),郝么滤除后的二次审计结 果中将不存在"al.java:L10:test( "helloworld")"送条内容。郝么,滤除该"al. java:L10:test( "helloworld")"送条审计内容的审计结果作为非误报审计结果。
[0132] 通过上述实施例,对误报的审计结果对应的源代码进行注释,再对注释后的应用 程序进行静态审计,得到二次审计结果,并对二次审计结果中具有注释的源代码对应的审 计结果滤除,得到不包含误报结果的非误报审计结果,根据注释的内容即可准确的确定二 次审计结果中的误报结果,并且,即使进行第二次静态审计时对审计的条件进行修改,也能 准确判断出审计结果中的误报。尤其在对应用程序进行微调并多次进行静态审计时,由于 不需要每次都添加注释,并且对应用程序的调整并不修改注释信息,因此在保证滤除审计 结果中误报结果的准确性的前提下,提高了效率。
[0133] 优选地,如图3所示,注释单元包括;第二获取模块,用于获取预设注释信息对应 的预设源代码。查找模块,用于查找与预设源代码相同的应用程序的源代码。注释模块,用 于对查找到的应用程序的源代码按照预设源代码对应的预设注释信息进行注释。
[0134] 在图3所示的应用程序注释模块中,获取预设注释信息对应的预设源代码,例如, 在应用程序中"显示类型"的代码为安全的代码,不应出现在非误报审计结果中,预设注释 信息对应的预设源代码为"显示类型"的源代码,郝么在应用程序的源代码中查找"显示类 型"的源代码,通过该源代码对应的预设注释信息进行注释。
[0135] 如图3所示,在得到二次审计结果之后,对误报结果进行过滤,郝么判断哪一条审 计结果为误报的结果就非常重要了,W下结合图8对判断二次审计结果中的误报进行说 明。
[0136] 优选地,判断模块包括;获取子模块701、解析子模块702、读取子模块703、判断子 模块704和查找子模块705。
[0137] 获取子模块701用于获取二次审计结果。即获取一条审计结果内容。如果二次审 计结果中具有多条审计结果,郝么读取多条审计结果中的任意一条结果,如果二次审计结 果中仅有一条审计结果,郝么读取该条审计结果即可。
[0138] 解析子模块702用于解析二次审计结果中的源文件名。即获取所在源文件 名称。解析在步骤S501中获取的郝条审计结果对应的源文件名称,例如,审计结果为 al.java:L10:test( "helloworId"),该审计结果中源文件名称为al.java。
[0139] 读取子模块703用于读取源文件名对应的应用程序中的源代码。即读取源文件 内容。读取源文件名对应的应用程序的源代码,读取的源代码是审计结果中源文件名称 al.java中第十行源代码所在的类或者方法范围内的所有代码,而test("hellowo;rld")只 是应用程序的源代码中的一行,审计结果认为送一条为存在安全威胁或者漏洞的代码。为 了准确判断该代码是否为误报,应该查看该源代码所在的方法或者类的范畴是否为被注释 的源代码。
[0140] 判断子模块704用于判断源文件名对应的源代码中是否包含预设注释信息。
[0141] 在读取源文件名对应的源代码之后,判断读取到的源代码中是否包含预设注释信 息。例如,预设注释信息的内容如下:
[0142] OJgMethod畑ecked(author= 1,date=" 2014-05-22" ,type="https_ check" ,comment="checked,issecurity"),或者,
[0143] OJgClass畑ecked(author= 1,date= " 2014-05-22" ,type= "https_ check',,comment=',checked,issecurity',),
[0144] 如果判断出读取的源代码中具有OJgMethodChecked或者OJgClassChecked字样, 则确定该读取的源代码包含预设注释信息。
[0145] 当然,如果应用程序是采用其他编程语言编写的程序,例如,C语言,预设注释信息 可能为$油cdefg等,郝么在检测出$油cdefg时确定读取的源代码中包含预设注释信息。
[0146] 查找子模块705用于在判断出源文件名对应的源代码中包含预设注释信息时,在 源文件名对应的源代码中逐行查找预设注释信息,其中,如果查找到预设注释信息,则确定 二次审计结果对应的应用程序的源代码中具有注释,如果没有查找到预设注释信息,则确 定二次审计结果对应的应用程序的源代码中不具有注释。
[0147] 如果判断出读取的源代码中包含预设注释信息,则在读取的源代码中逐行查找注 释信息,即执行如图5所示的步骤S5051至步骤S505n。读取到的源代码中查找到预设注释 信息,则确定该源代码被注释,该源代码对应的审计结果为误报,读取到的源代码中没有预 设注释信息,则确定该源代码没有被注释,该源代码对应的审计结果非误报。
[014引利用查找子模块逐行查找预设注释信息,其中,查找子模块705包括:
[0149] 第一判断分模块7051用于判断源文件名对应的源代码中当前行是否为类定义 头。
[0150] 第二判断分模块7053用于在当前行是类定义头时,判断当前行是否具有预设注 释信息。
[0151] 第一标记分模块7055用于在当前行具有预设注释信息时,对类定义头所在类的 注释范围内的所有行标记为有注释,并读取下一行内容。
[0152] 判断读取的当前行是否为类定义头,如果当前行为类定义头,则判断该类定义头 所在行是否具有预设注释信息,即判断当前行是否具有预设注释信息,如果该类定义头所 在行具有预设注释信息,则确定该类定义头所在类的注释范围内的源代码均为安全的代 码,即该类的注释范围内的任意一条源代码都不应该对应二次审计结果,因此,在类定义头 具有注释时,对类的注释范围内的所有行都进行标记,W表征被标记的行是具有注释的行。 例如,当前行是类的定义头classcl且包含注释OJgClass化ecked,则标记进入该注释所管 辖的代码范围为flag= 1。
[0153] 如果当前行没有预设注释信息,则读取下一行内容。
[0154] 进一步地,该装置还包括:第Η判断分模块,用于在判断源文件名对应的源代码中 当前行是否为类定义头之后,在当前行不是类定义头时,判断当前行是否为装置定义头。W 及第四判断分模块,用于在判断出当前行不是装置定义头时,读取下一行内容。
[0155] 在一个类定义头的范围内,可能包括多个行定义头,则在判断出当前行不是类定 义头后,判断当前行是否为方法定义头,如果判断出当前行不是方法定义头,则读取器7057 读取下一行内容,。
[0156] 由于应用程序的源代码中除了包含类定义头,还包括方法定义头。对于方法定义 头,查找子模块可W通过如下分模块逐行查找预设注释信息,其中,查找子模块还包括:
[0157] 第五判断分模块7052用于判断源文件名对应的源代码中当前行内容是否为装置 定义头。
[0158] 第六判断分模块7054用于在当前行是装置定义头时,判断当前行是否具有预设 注释信息。
[0159] 第二标记分模块7056用于在当前行具有预设注释信息时,对装置定义头所在装 置的注释范围内的所有行标记为有注释,并读取下一行内容。
[0160] 判断读取的当前行是否为方法定义头,如果当前行为方法定义头,则判断该方法 定义头所在行是否具有预设注释信息,即判断当前行是否具有预设注释信息,如果该方法 定义头所在行具有预设注释信息,则确定该方法定义头所在方法的注释范围内的源代码 均为安全的代码,即该方法的注释范围内的任意一条源代码都不应该对应二次审计结果, 因此,在方法定义头具有注释时,对方法的注释范围内的所有行都进行标记,W表征被标 记的行是具有注释的行。例如,当前行是方法的定义头publicvoid化nl且包含注释@ JgMethod化ecked,则标记进入该注释所管辖的代码范围为flag= 1。如果当前行没有预设 注释信息,则读取下一行内容。
[0161] 优选地,为了准确找到审计结果对应的源代码所在的行是否有注释,该查找子模 块包括:第走判断分模块7058、第八判断分模块7059和确定分模块7060。
[0162] 第走判断分模块7058
当前第4页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1