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

文档序号:9523967阅读:来源:国知局
则对类定义头所在类的注释范围内的 所有行标记为有注释,并读取下一行内容。
[0082] 判断读取的当前行是否为类定义头,如果当前行为类定义头,则判断该类定义头 所在行是否具有预设注释信息,即判断当前行是否具有预设注释信息,如果该类定义头所 在行具有预设注释信息,则确定该类定义头所在类的注释范围内的源代码均为安全的代 码,即该类的注释范围内的任意一条源代码都不应该对应二次审计结果,因此,在类定义头 具有注释时,对类的注释范围内的所有行都进行标记,W表征被标记的行是具有注释的行。 例如,当前行是类的定义头classcl且包含注释OJgClass化ecked,则标记进入该注释所管 辖的代码范围为flag= 1。
[0083] 如果当前行没有预设注释信息,则读取下一行内容。
[0084] 进一步地,在判断源文件名对应的源代码中当前行是否为类定义头之后,该方法 还包括;如果当前行不是类定义头,则判断当前行是否为方法定义头。W及如果判断出当前 行不是方法定义头,则读取下一行内容。
[0085] 在一个类定义头的范围内,可能包括多个行定义头,则在判断出当前行不是类定 义头后,判断当前行是否为方法定义头,如果判断出当前行不是方法定义头,则执行步骤 S5057,即读取下一行内容,。
[0086] 由于应用程序的源代码中除了包含类定义头,还包括方法定义头。对于方法定义 头,可W按照如下步骤逐行查找预设注释信息:
[0087] 步骤S5052,判断源文件名对应的源代码中当前行内容是否为方法定义头。
[0088] 步骤S5054,如果当前行是方法定义头,则判断当前行是否具有预设注释信息。
[0089] 步骤S5056,如果当前行具有预设注释信息,则对方法定义头所在方法的注释范围 内的所有行标记为有注释,并读取下一行内容。
[0090] 判断读取的当前行是否为方法定义头,如果当前行为方法定义头,则判断该方法 定义头所在行是否具有预设注释信息,即判断当前行是否具有预设注释信息,如果该方法 定义头所在行具有预设注释信息,则确定该方法定义头所在方法的注释范围内的源代码 均为安全的代码,即该方法的注释范围内的任意一条源代码都不应该对应二次审计结果, 因此,在方法定义头具有注释时,对方法的注释范围内的所有行都进行标记,W表征被标 记的行是具有注释的行。例如,当前行是方法的定义头public void化nl且包含注释@ JgMethod化ecked,则标记进入该注释所管辖的代码范围为flag= 1。如果当前行没有预设 注释信息,则读取下一行内容。
[0091] 优选地,为了准确找到审计结果对应的源代码所在的行是否有注释,则在读取下 一行内容之后,该方法还包括如下步骤:
[0092] 步骤S5058,判断下一行内容是否被标记为有注释且注释范围是否结束。
[0093] 判断下一行内容是否被标记为有注释,例如具有flag=1的标记,且当前行是否 还处于注释范围内。
[0094] 若当前已位于方法的结束行(方法定义的起始行到结束行的所有和字符 数相匹配),且该方法添加了@JgMethod化ecked注释,则标记当前已跳出方法注释所管辖 的代码范围;
[0095] 若当前已位于类的结束行(类定义的起始行到结束行的所有和字符数 相匹配),且该类添加了@JgClass化ecked注释,则标记当前已跳出类注释所管辖的代码范 围;
[0096] 若按行读取文件内容至文件末尾,发现审计结果项涉及的代码行不在任何预设注 释信息的范围内,则说明当前审计结果对应的源代码未被添加注释,则将当前审计结果输 出为非误报结果。
[0097] 步骤S5059,如果下一行内容被标记为有注释,且注释范围未结束,则判断该下一 行内容是否为二次审计结果中记录的内容。
[0098] 如果下一行内容被标记为有注释,且该行内容还处于注释范围内,则判断该行 内容是否为二次审计结果中记录的内容。例如,二次审计结果中的其中一条审计结果为 al. java: L10: test("helloworld"),从源文件al. java的第一行开始读取源代码,直至读 到第十行时,判断出该行内容即为审计结果中记录的郝一行。如果下一行内容没有被标记 为有注释,且注释范围结束,则flag=0,读取下一行内容。
[0099] 步骤S5060如果下一行内容为二次审计结果中记录的内容,则确定二次审计结果 中记录的内容已经被注释,其中,在确定二次审计结果中记录的内容已经被注释之后,滤除 二次审计结果。
[0100] 如果判断出读取的下一行的内容为二次审计结果中记录的内容,且该行内容在注 释范围内,即被标记为有注释,则确定该行内容对应的审计结果为误报的审计结果,如果读 取的该行不是二次审计结果中记录的内容,则继续读取下一行内容。在确定二次审计结果 中记录的内容已经被注释之后,过滤该二次审计结果,使其不出现在非误报审计结果中。
[0101] 上述实施例中,利用二次审计结果中记录的源文件名称读取源文件,并对源文件 的内容进行逐行读取,在类定义头或者方法定义头具有预设注释信息时,则将该类定义头 或者方法定义头的注释管辖范围内的所有的行标记为有注释,送样,在查找到二次审计结 果中记录的行时,如果判断出该行被标记为有注释,则确定该行对应的二次审计结果为误 报,从二次审计结果中滤除该条审计结果;如果判断出该行没有标记为注释,则确定该审 计结果非误报,应该输出在非误报审计结果中。通过上述实施例,通过逐行判断源代码是 否有注释能够确定该审计结果是否为误报,在查找审计结果对应的源代码所在行时,对每 个处于注释范围内的源代码行都进行标记,及时预设注释信息没有标记在所有的源代码行 中,通过标记也能分辨出每个源代码行是否具有注释,逐行判断能够避免漏判,标记能够避 免错判,因此,通过上述实施例能够准确判断审计结果是否为误报,提高了判断误报的准确 性。
[0102] 需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列 的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为 依据本发明,某些步骤可W采用其他顺序或者同时进行。其次,本领域技术人员也应该知 悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明 所必须的。
[0103] 通过W上的实施方式的描述,本领域的技术人员可W清楚地了解到根据上述实施 例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可W通过硬件,但很多 情况下前者是更佳的实施方式。基于送样的理解,本发明的技术方案本质上或者说对现有 技术做出贡献的部分可软件产品的形式体现出来,该计算机软件产品存储在一个存储 介质(如R0M/RAM、磁碟、光盘)中,包括若干指令用W使得一台终端设备(可W是手机,计 算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
[0104] 实施例2
[0105] 根据本发明实施例,还提供了一种用于执行上述应用程序审计的数据处理方法的 应用程序审计的数据处理装置。
[0106] 图6是根据本发明实施例的应用程序审计的数据处理装置的示意图。如图所示, 该装置包括第一获取单元60、第二获取单元62、注释单元64、滤除单元66和输出单元68。
[0107] 第一获取单元60用于获取对应用程序进行静态审计的原始审计结果。
[0108] 对应用程序进行静态审计能够对应用程序进行类型检查、代码风格检查、bug查找 和安全审查等,W保证应用程序在使用过程中没有错误或者安全漏洞。在对应用程序进行 静态审计之后,输出原始审计结果,但是由于静态审计采用特征或者模式匹配的方法对应 用程序的源代码进行检测,在审计过程中可能存在误报,即将没有缺陷或者漏洞的应用程 序的源代码识别为有缺陷或者漏洞的源代码,输出的原始审计结果中包含误报的内容。
[0109] 第二获取单元62用于获取预设注释信息,其中,预设注释信息为表征原始审计结 果为误报的信息。
[0110] 预设注释信息中包括了注释的接口和格式等,例如,包括注释名称、注释作用的语 法结构类型(类或方法等)W及注释需要包含的成员变量。如下示例说明了一个化va类 级别的自定义注释JgClass化ecked,即对利用化va语言编写的应用程序进行类级别的注 释。其注释形式为@JgClassQiecked,该注释需要包含author、date、type和comment四 个成员的描述。除类级别的注释定义外,SDK还定义了方法级别的注释,其注释形式为@ JgMethodQiecked。
[0111] 预设注释信息中注释格式如下:
[0112]
[011引
[0114] 注释单元64用于通过预设注释信息对原始审计结果对应的应用程序的源代码进 行注释。
[0115] 如果原始审计结果为误报的审计结果,郝么对误报的审计结果对应的应用程序的 源代码进行注释,即通过预设注释信息对原始审计结果对应的应用程序的源代码进行注 释,送样在应用程序的源代码中就注释有预设注释信息,W表征被注释源代码为安全的代 码,不应该记录在原始审计结果中,即确定原始审计结果中针对该代码的报告为误报。
[0116] 由于预设注释信息用于表征原始审计结果中的误报信息,则通过预设注释信息应 用程序的源代码进行注释时,不需要对应用程序中所有的安全源代码进行注释,仅需针对 被误报的源代码进行注释。
[0117] 当确定原始审计结果为误报时,对该原始审计结果对应的应用程序的源代码进 行注释。例如,对于利用化va编写的应用程序,首先引入Annotation SDK,并在应用程 序的源代码上根据SDK定义的注释接口添加代码注释。如果原始审计结果中误报结果 对应的源文件为al. java,该误报结果所在的代码位于方法η中,则在源文件al. java 的方法fl前添加方法级别的白名单注释,内容如@JgMethod化ecked(author = 1, date ="2014-05-22", type ="https_check", comment ="checked, is security")。@ JgMethodChecked注释作用于方法级别,被JgMethodChecked注释的方法代码被视为白 名单,即在审计结果中滤除该方法级别注释对应的应用程序的源代码。同理,还可^用@ JgClass化ecked注释作用于类级别,而被JgClass化ecked作用的类级别的源代码也被视 为白名单。
[0118] 滤除单元66用于滤除带有预设注释信息的源代码对应的审计结果,得到非误报 审计结果。
[0119] 在确定带有预设注释信息的源代码为安全的代码后,滤除送些带有预设注释信息 的源代码对应的审计结果,得到非误报审计结果,即在滤除送些审计结果后,与原始审计结 果相比,非误报审计结果中不包括误报的内容。
[0120] 输出单元68用于输出非误报审计结果。
[0121] 输出非误报审计结果后,由于输出的非误报审计结果对应的应用程序的源代码均 为存在问题的源代码,从而在查看审计结果时不会收到误报内容的干扰,只需针对非审计 结果对应的源代码中的安全威胁或者漏洞进行修复即可。
[0122] 通过上述实施例,在得到原始审计结果后,对原始审计结果对应的应用程序的源 代码进行注释,W表征该被注释的应用程序的源代码对应的审计结果为误报,通过滤除送 些带有预设注释信息的应用程序的源代码对应的审计结果来得到非误报审计结果
当前第3页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1