软件安全-安全编码_第1页
软件安全-安全编码_第2页
软件安全-安全编码_第3页
软件安全-安全编码_第4页
软件安全-安全编码_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 第五章第五章 安全编码安全编码5.1 什么是软件编码什么是软件编码5.2 编码方法编码方法5.3 代码审核代码审核5.1 什么是软件编码什么是软件编码n正确理解软件编码正确理解软件编码 (1)什么是软件编码?)什么是软件编码? (2)程序员应具备的能力)程序员应具备的能力 (3)软件编码过程)软件编码过程 5.1.1 什么是软件编码(什么是软件编码(1/2)5.1.1 什么是软件编码(什么是软件编码(2/2)n 理解软件编码理解软件编码 复杂地讲,软件编码是一个系统工程,是一个复杂而动态的过程,包括程序设计和程序实现,即如何正确的理解用户需求和软件设计的思想;如何正确的根据软件设计进行程序设

2、计;如何正确而高效的进行代码编写和测试。 软件编码是设计的继续,会影响软件质量和可维护性。 n 程序员就是软件工程师,兼顾设计和编码。程序员就是软件工程师,兼顾设计和编码。 国内对好程序员的要求是比较高的,不光要掌握一门编程语言,熟悉软件编码;还要全方位地了解软件设计,这样才能成为一个合格的程序员,真正的软件从业人员。 5.1.2 程序员应具备的能力(程序员应具备的能力(1/3)n必备能力必备能力 英语阅读功底 数学功底(算法) 做事的条理性 认识事务的能力(抽象、模型、结构、层次) 计算机软、硬件基础知识 SQL编程 拿来主义和拿来的能力 基本功:基本原理和实践,欲速则不达。基本功:基本原理

3、和实践,欲速则不达。5.1.2 程序员应具备的能力(程序员应具备的能力(2/3)n热情和勇气热情和勇气 热情乐天,摈弃绝望,软件行业千变万化,技术日新月异 随时有面对无知的勇气 随时有承认错误的勇气 随时准备加班 n精通一门编程语言精通一门编程语言 了解一点主流桌面应用程序程序开发语言 了解一点主流网络应用程序开发技术 了解一点主流关系型数据库管理系统 不同的程序设计语言只代表其编程元素和规则不同,但基本的编程、方法都是相通的,掌握了一门即可掌握其它。 5.1.2 程序员应具备的能力(程序员应具备的能力(3/3)n 如何使自己迅速成为一个程序员如何使自己迅速成为一个程序员 抓住一切机会,勇于实

4、践抓住一切机会,勇于实践 克服恐惧心理,敢于写程序,尽快写程序 从最简单的程序写起 如果有工程机会,无偿也值 不要避重就轻 知难而上 5.1.3 软件编码过程软件编码过程5.2 编码方法编码方法n 5.2.1 编码规范编码规范n 5.2.2 若干建议若干建议5.2.1 编码规范编码规范编码规范的必要性:编码规范的必要性:n有助于程序的维护,降低软件生命周期成本,符合有助于程序的维护,降低软件生命周期成本,符合项目管理的规律;项目管理的规律;n使团队中相关人员的流动对项目的影响尽可能小,使团队中相关人员的流动对项目的影响尽可能小,有利于项目的控制与管理;有利于项目的控制与管理;n提高程序的可读性

5、,有利于相关设计人员交流,提提高程序的可读性,有利于相关设计人员交流,提高软件质量;高软件质量;n容易发现代码的问题,调试时比较容易;容易发现代码的问题,调试时比较容易;n体现公司形象。体现公司形象。5.2.1 编码规范编码规范(1)文件命名与组织 (2)缩进、空格与换行 (3)命名规则 (4)声明 (5)语句 (6)注释命名方法命名方法nPascal:每个单词首字母大写。:每个单词首字母大写。nCamel:第一个单词首字母小写,余下的单词首字:第一个单词首字母小写,余下的单词首字母大写。母大写。n缩写:两个字母的缩写,缩写:两个字母的缩写,Pascal命名法两个字母都命名法两个字母都大写,大

6、写,Camel命名法,如果两个缩写字母是首单词命名法,如果两个缩写字母是首单词,两个字母都小写,否则按照常规来处理。两个以,两个字母都小写,否则按照常规来处理。两个以上字母的缩写都按照常规处理。上字母的缩写都按照常规处理。文件命名与组织文件命名与组织n文件的命名一般采用文件的命名一般采用Pascal命名规则,无特殊情况命名规则,无特殊情况,文件的扩展名小写。,文件的扩展名小写。n文件的扩展名使用统一而且通用的扩展名,如文件的扩展名使用统一而且通用的扩展名,如.cs、.java、.cppn尽量避免超过尽量避免超过2000行的文件,尽量避免一行的长度行的文件,尽量避免一行的长度超过超过80个字符。

7、个字符。缩进、空格与换行缩进、空格与换行n空格、空行不做严格的固定,以使代码清晰为基本空格、空行不做严格的固定,以使代码清晰为基本原则。空行不影响程序的运行,但可以使代码看起原则。空行不影响程序的运行,但可以使代码看起来清晰,增加可读性,因此可以适当的多用。来清晰,增加可读性,因此可以适当的多用。n代码的缩进建议使用代码的缩进建议使用tab键进行控制,键进行控制,tab键的大小键的大小设置为设置为4个空格。每个层次都要进行缩进。个空格。每个层次都要进行缩进。如:如:if (isOverFlow)return false;缩进、空格与换行缩进、空格与换行n换行,掌握的原则是不要使一行代码特别的长

8、。另外,换行换行,掌握的原则是不要使一行代码特别的长。另外,换行的原则是,在逗号后,操作符前换行,换行与首行要保持缩的原则是,在逗号后,操作符前换行,换行与首行要保持缩进。进。nif,while,do,try-catch-finally等语句后必须有等语句后必须有,即使里即使里面只有一条语句或为空。面只有一条语句或为空。缩进、空格与换行缩进、空格与换行缩进、空格与换行缩进、空格与换行ExerciseExercise命名规则命名规则 标识符的名字应当直观且可以拼读,可望文知义,不必进行标识符的名字应当直观且可以拼读,可望文知义,不必进行 “解码解码”。 例如:例如:CurrentValue与与N

9、owValue 。 变量的名字应当使用变量的名字应当使用“名词名词”或或“形容词名词形容词名词”的格式命名。的格式命名。 例如:例如: float value; float oldValue; 全局函数的名字应当使用全局函数的名字应当使用“动词动词”或者或者“动词名词动词名词” (动宾词组)。类的成员函数应当(动宾词组)。类的成员函数应当只使用只使用“动词动词”,被省略掉的名词就,被省略掉的名词就 对象本身。对象本身。 例如:例如: DrawBox ( ); / 全局函数全局函数 box.Draw ( ); / 类的成员函数类的成员函数 静态变量加前缀静态变量加前缀s_ (表示(表示stati

10、c) 例如:例如:static int s_initValue; 如果不得已使用全局变量,全局变量加前缀如果不得已使用全局变量,全局变量加前缀g_ (表示(表示global) 例如:例如:int g_howManyPeople; 类的成员变量加类的成员变量加m(表示(表示member),从而避免数据成员与成员函数的参数重名。),从而避免数据成员与成员函数的参数重名。 例如:例如:void Object:SetValue( int width, int height ) m_width = width; m_height = height; 声明声明n每行只定义一个声明,多个声明要分多行来定义。

11、如:每行只定义一个声明,多个声明要分多行来定义。如:int intAge,intWeight;/不推荐不推荐应使用如下的定义形式:应使用如下的定义形式:int intAge;int intWeight;n声明的位置:变量要在块的开始的地方集中进行声明,不要声明的位置:变量要在块的开始的地方集中进行声明,不要何时用到何时临时定义。何时用到何时临时定义。语句语句n一行一条语句一行一条语句注释注释n要养成良好的代码注释习惯,通常,注释要占实际代码总行要养成良好的代码注释习惯,通常,注释要占实际代码总行数的数的1/3,同时,要在编写代码前或编写代码的同时进行代码,同时,要在编写代码前或编写代码的同时进

12、行代码的注释,不要事后补写注释。的注释,不要事后补写注释。n注释分为多行注释和单行注释,我们的原则是:在类和方法注释分为多行注释和单行注释,我们的原则是:在类和方法的前面,要写多行注释,在定义类的全局变量的前面,要写多行注释,在定义类的全局变量/常量,以及方常量,以及方法的内部,使用单行注释。注释的前面与代码之间要有空行法的内部,使用单行注释。注释的前面与代码之间要有空行n即使是单行注释,我们鼓励都要单独一行,不鼓励在语句的即使是单行注释,我们鼓励都要单独一行,不鼓励在语句的后面使用注释,当然,在变量定义的后面使用注释也是允许后面使用注释,当然,在变量定义的后面使用注释也是允许的,但不建议这么

13、做。的,但不建议这么做。n另外,在编写注释的时候,建议使用编程语言自己的注释风另外,在编写注释的时候,建议使用编程语言自己的注释风格。格。注释注释n特别注意,如果是在已经发行版本的基础上添加、修改、删特别注意,如果是在已经发行版本的基础上添加、修改、删除代码,则需要将原先的代码注释掉,而不是直接删除掉,除代码,则需要将原先的代码注释掉,而不是直接删除掉,然后添加自己的代码。如:然后添加自己的代码。如:添加新代码的注释:添加新代码的注释:/add by 姓名姓名 yyyyMMdd xxx / add by 姓名姓名 yyyyMMdd修改代码的注释:修改代码的注释: /update by 姓名姓名

14、 yyyyMMdd / xxx yyy / update by 姓名姓名 yyyyMMdd删除代码的注释:删除代码的注释:/delete by 姓名姓名 yyyyMMdd /xxx/ delete by 姓名姓名 yyyyMMdd/* * * 命名空间 : * 类 名 : * 功能描述 : * 处理流程 : * 算 法 : * 姓 名 : * 日 期 : * 修 改 : * 日 期 : * 错误编号 : * 备 注 : * 版 本 : * */程序注释的原则程序注释的原则 注释应当浅显、明白注释应当浅显、明白 注释不是程序员指南注释不是程序员指南 注释不是标准库函数参考手册注释不是标准库函数参

15、考手册 注释的主要任务是答疑解惑而不是增注释的主要任务是答疑解惑而不是增加程序的行数加程序的行数 好的注释是对设计思想的精确表述和好的注释是对设计思想的精确表述和清晰展现清晰展现 5.2.2 若干建议若干建议n某些“ 自由的”语言更容易引发内存错误(如C/C+) n要避免产品中出现内存错误,好的编码规范、所选的语言和 工具、有效的测试等工作都是有意义的 内存分配方式内存分配方式n从静态存储区域分配:内存在编译时已分配好,在从静态存储区域分配:内存在编译时已分配好,在程序的整个运行期间都存在。例如:全局变量、静程序的整个运行期间都存在。例如:全局变量、静态变量等。态变量等。 n在堆栈上创建:在函

16、数执行期间,函数内的局部变在堆栈上创建:在函数执行期间,函数内的局部变量(包括形参)的存储单元都创建在堆栈上,函数量(包括形参)的存储单元都创建在堆栈上,函数结束时这些存储单元自动释放(堆栈清退)。结束时这些存储单元自动释放(堆栈清退)。 n从堆(从堆(heap )上分配,也称动态内存分配:程序运)上分配,也称动态内存分配:程序运行期间用行期间用malloc或或new 申请任意数量的内存,程序申请任意数量的内存,程序员自己掌握释放内存的恰当时机(使用员自己掌握释放内存的恰当时机(使用free或或delete)。)。 5.2.2 若干建议若干建议n断言(assert)的用法是受限制的,其根本原因

17、在于断言内部的语句在软件的发布版本(Release版)中将变成空语句,不起任何作用; n宏定义的优点和缺点同样明显,这种情况下,程序员需要趋利弊害,择善而从。n改进算法可以显著提高速度 n将代码和数据保存在更快的介质上同样可以显著提高速度 n编译优化选项并不总能提高速度 5.3 代码审核代码审核n常见的软件编码漏洞常见的软件编码漏洞n源码审查源码审查5.3.1 常见的软件编码漏洞常见的软件编码漏洞n输入检测机制输入检测机制n例外处理机制例外处理机制n缓冲区溢出缓冲区溢出nSQL注入注入n竞争条件竞争条件输入检测机制输入检测机制n输入参数的合法性检查输入参数的合法性检查n使用白名单使用白名单例外

18、处理机制例外处理机制n处理意料之外的事件处理意料之外的事件n使用条件判断使用条件判断缓冲区溢出缓冲区溢出n防止写缓冲区越界防止写缓冲区越界n添加检测机制添加检测机制SQL注入注入n防止执行非法防止执行非法SQL语句语句n从用户访问接口中删除从用户访问接口中删除SQL语句执行机制语句执行机制竞争条件竞争条件n避免因未处理死循环、死锁、资源冲突或处理不当避免因未处理死循环、死锁、资源冲突或处理不当造成软件漏洞造成软件漏洞n信号量信号量n互斥互斥n关键段关键段5.3.2 源码审查源码审查n静态代码分析工具静态代码分析工具n计量分析计量分析n代码分析过程图代码分析过程图静态代码分析工具静态代码分析工具nPVS-StudionCheckstylenFindBugsnPMDnJtestnPC-LINT该网址收录了目前基本上所有的静态代码分析工具,其该网址收录了目前基本上所有的静态代码分析工具,其中(中(HP)Fortify

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论