黄志浩 13378656621

什么是软件代码审计?

发布:2022-12-05 09:56,更新:2022-12-05 09:56

一、代码审计

1.1什么是代码审计?

软件代码审计是对软件解决方案或产品中的源代码的全面分析。它被认为是安全过程中关键的阶段之一,因为它用于验证代码的成熟度和可维护性,同时确保产品已准备好进行无缝切换。

1.2为什么要执行代码审核?

1. 熟悉当前的项目结构和功能

2. 发现现有和潜在的错误

3. 发现安全漏洞和漏洞

4. 验证当前性能和可扩展性

5. 评估代码可维护性级别以及相关的风险和成本

6. 验证是否符合相关的软件开发标准、指南和佳实践

1.3代码审计的好处

1. 实现的漏洞扫描和修补

2. 打造更加安全可靠的网络运行环境

二、代码审计流程

2.1代码检查方法

(1)桌面检查

这是一种传统的检查方法。程序员检查自己的程序。程序编译完成后,程序员会对源代码进行分析和检查,并补充相关文档,以发现程序中的错误。由于程序员熟悉自己的程序和编程风格,程序员自己进行桌面检查可以节省大量检查时间,但应避免主观的片面性。

(2) 代码审查

由几个程序员和测试人员组成的评审小组通过阅读、讨论和争论对程序进行静态分析的过程。代码评审分为两步:步是组长提前向团队成员分发设计规范、控制流程图、程序文本、相关要求和规范,作为评审的依据。在充分阅读这些材料后,团队成员进入审查的第二步,并召开程序审查会议。在会上,程序员首先逐句介绍了程序的逻辑。在这个过程中,程序员或其他团队成员可以提出问题、讨论和审查是否存在错误。实践表明,程序员可以发现许多他们在解释过程中没有发现的错误,而讨论和争议会促进问题的暴露。

应为审查小组的每个成员编制一份常见错误清单,列出过去所有可能的常见错误,供与会者进行比较和检查,以提高审查的有效性。这个常见错误列表也称为检查表。它对程序中可能出现的各种错误进行分类,列出每种类型错误的尽可能多的典型错误,然后将它们放入一个表格中进行重新检查。

(3)走查

它与代码审查基本相同,代码审查分为两个步骤。步是将材料分发给走查小组的每个成员,并要求他们在召开会议之前仔细研究程序。会议程序与准则审查不同。参与者不是简单地阅读程序并对照错误清单进行检查,而是“充当”一台计算机,也就是说,首先,测试团队的成员为测试程序准备一批具有代表性的测试用例,并将它们提交给走查团队。在小组会议中穿行,集体扮演计算机的角色,让测试用例沿着程序的逻辑运行,并随时记录程序的轨迹以供分析和讨论。

借助测试用例的媒体功能,人们对程序的逻辑和功能提出了各种各样的问题,并结合问题进行了热烈的讨论和争论,从而发现更多的问题。

代码检查应在编译和动态测试前进行。检查前,应编制需求描述文件、程序设计文件、程序源代码、代码编写标准和代码缺陷检查表。在实际使用中,代码检查可以发现缺陷,发现30%到70%的逻辑设计和编码缺陷,代码检查中发现的问题不是症状。然而,代码检查非常耗时,代码检查需要积累知识和经验。

代码检查可以使用测试软件进行自动测试,以提高测试效率和降低劳动强度,也可以使用手动测试来充分发挥人类的逻辑思维能力。

2.2代码检查项目

文档和源程序代码

一份新的设计文档

程序结构图

所有的模块源程序代码

代码体系结构描述

目录文件

代码组织

目录文件组织

所有的文件名简单明了,见名知意

文件和模块分组清晰

每个文件只包含一个完整模块的代码

数据库检查

数据库命名使用小写英语字母, 数字和下划线,无其他字符

数据库命名采用项目名或产品名称命名 ,长度小于20位

数据库中的所有表字符集统一

检查函数

函数头清晰地描述了函数的功能

函数的名字清晰地定义了它所要做的事情

参数遵循一个规律的顺序

所有的参数都是要有用的

函数参数接口关系清晰明了

函数所使用的算法要有说明

数据类型及变量

每个数据类型都有其解释

每个数据类型都有正确的取值

每一个变量的命名,都明确的表示代表什么

检查条件判断语句

If/else 使用正确

无嵌套的if链

数字,字符,指针和0/NULL/FLSE 判断明确

不要有臃肿的判断逻辑

检查循环体

循环体不为空

循环之前做好初始化代码

有明确的多次循环操作,使用For循环

所有的循环边界是否正确

检查代码注释

有一个简单的说明,用于描述代码的结构

每个文件和模块均以给予解释

程序(模块)检查

程序中所有的异常是否处理了

程序中是否存在重复的代码

函数调用关系图

模块控制流图

2.3编码规范

编码规范是指在编程过程中必须遵循的规则。通常,将详细制定代码的语法规则和语法格式。

如:当响应“content-type”为“html”类型时,外部输入拼接到响应包中,需根据输出位置进行编码处理。编码规则:

场景

编码规则

输出点在HTML标签之间

需要对以下6个特殊字符进行HTML实体编码(&, <, >, ", ',/)。

示例:

& --> &

< --> <

>--> >

" --> "

' --> '

/ --> /

输出点在HTML标签普通属性内(如href、src、style等,on事件除外)

要对数据进行HTML属性编码。

编码规则:除了阿拉伯数字和字母,对其他所有的字符进行编码,只要该字符的ASCII码小于256。编码后输出的格式为&#xHH;(以&#x开头,HH则是指该字符对应的十六进制数字,分号作为结束符)

输出点在JS内的数据中

需要进行js编码

编码规则:

除了阿拉伯数字和字母,对其他所有的字符进行编码,只要该字符的ASCII码小于256。编码后输出的格式为 \xHH (以 \x 开头,HH则是指该字符对应的十六进制数字)

Tips:这种场景于外部数据拼接在js里被引号括起来的变量值中。除此之外禁止直接将代码拼接在js代码中。

输出点在CSS中(Style属性)

需要进行CSS编码

编码规则:

除了阿拉伯数字和字母,对其他所有的字符进行编码,只要该字符的ASCII码小于256。编码后输出的格式为 \HH (以 \ 开头,HH则是指该字符对应的十六进制数字)

输出点在URL属性中

对这些数据进行URL编码

Tips:除此之外,所有链接类属性应该校验其协议。禁止JavaScript、data和Vb伪协议


联系方式

  • 地址:深圳市宝安区航城街道九围社区洲石路723号强荣东工业区E2栋华美电子厂2层
  • 电话:13378656621
  • 老板:蔡工
  • 手机:13378656621
  • 微信:gang767
  • QQ:591667757
  • Email:591667757@qq.com
产品分类