软件开发编码规范86601

合集下载

软件编码规范方案

软件编码规范方案

软件编码规范中国人民银行清算总中心支付系统开发中心注:变化状态:A—增加,M—修改,D—删除目录第一篇C/C++编码规范 (6)第一章代码组织 (6)第二章命名 (8)2.1文件命名 (8)2.2变量命名 (8)2.3常量与宏命名 (9)2.4类命名 (9)2.5函数命名 (9)2.6参数命名 (10)第三章注释 (11)3.1文档化注释 (11)3.2语句块注释 (16)3.3代码维护注释 (19)第四章编码风格 (21)4.1排版风格 (21)4.2头文件 (25)4.3宏定义 (26)4.4变量与常量 (29)4.5条件判断 (31)4.6空间申请与释放 (32)4.7函数编写 (32)4.8类的编写 (35)4.9异常处理 (38)4.10特殊限制 (38)第五章编译 (40)第六章ESQL/C编码 (45)第二篇JAVA编码规范 (46)第一章代码组织 (47)第二章命名 (50)2.1包命名 (50)2.2类命名 (50)2.3接口命名 (50)2.4方法命名 (50)2.5变量命名 (50)2.6类变量命名 (50)2.7常量命名 (51)2.8参数命名 (51)第三章注释 (52)3.1文档化注释 (52)3.2语句块注释 (56)3.3代码维护注释 (57)第四章编码风格 (59)4.1排版风格 (59)4.2包与类引用 (64)4.3变量与常量 (64)4.4类编写 (65)4.5方法编写 (66)4.6异常处理 (69)4.7特殊限制 (69)第五章编译 (71)第六章JSP编码 (72)6.1文件命名及存放位置 (72)6.2内容组织 (72)6.3编码风格 (73)6.4注释 (76)6.5缩进与对齐 (76)6.6表达式 (77)6.7JavaScript (77)第三篇POWERBUILDER编码规范 (78)第一章代码组织 (79)第二章命名 (80)2.1文件命名 (80)2.2对象命名 (80)2.3变量命名 (82)2.4常量命名 (83)2.5函数与事件命名 (83)2.6参数命名 (83)第三章注释 (83)3.1文档化注释 (83)3.2语句块注释 (85)3.3代码维护注释 (86)第四章编码风格 (87)4.1界面风格 (87)4.2排版风格 (90)4.3变量与常量 (93)4.4条件判断 (93)4.5空间申请与释放 (94)4.6函数编写 (94)4.7特殊限制 (94)第五章SQL编码 (95)前言程序编码是一种艺术,既灵活又严谨,充满了创造性与奇思妙想。

软件开发及编码规范(数据库)

软件开发及编码规范(数据库)

内部是否保密□是■否文档类别:软件开发及编码规范阅读范围:公司研发事业部所有员工版本号:文档编号:广州吉海通讯科技有限公司软件开发及编码规范(数据库)编制单位:编制者:编制日期:审核者:批准者:修订历史记录版本制定和修订情况VI.0 制定/修订背景制定/修订内容编审批情况编制:审核:批准:生效日期:目录1.概述 (4)2.编写目的 (4)3.开发规范 (4)3.1.源码版本库组织结构 (4)3.2.开发工具 (5)3.3.开发方式 (6)3.4.其他 (6)4.编码规范 (6)4.1.数据库设计原则 (6)4.1.1.创建数据字典和ER图 (6)4.1.2.禁止使用大小写混用的对象名和特殊字符 (6)4.1.3.小心数据库保留词 (6)4.1.4.避免使用触发器 (6)4.1.5.别忘了索引 (7)4.1.6.不要索引小型表 (7)4.1.7.用约束而非业务规则强制数据完整性 (7)4.1.8.数据类型的选择 (7)4.2.命名规范 (7)4.2.1.表(TABLE)的命名规范 (7)4.2.2.视图(VIEW)的命名规范 (8)4.2.3.字段(COLUMN)的命名规范 (8)4.2.4.主键(PRIMARY KEY)的命名规范 (8)4.2.5.外键(FOREIGN KEY)的命名规范 (8)4.2.6.索引(INDEX)的命名规范 (8)4.2.7.触发器(TRIGGER)的命名规范 (8)4.2.8.存储过程(PROCEDURE)的命名规范 (8)4.2.9.其他数据库对象命名规范 (8)1.概述为了提高软件开发质量,降低开发周期,增强代码的可重用性和易读性,使软件便于维护,开发人员间便于交流和协作,特总结出开发规范,以为参考。

程序设计规范是程序员在程序设计过程中所要遵循的某些行为准则或模式。

程序设计规范所讨论的问题是怎样才能写出简洁、清晰、易于理解的好程序,为此还要注意哪些问题,等等。

软件研发项目编码规范与开发标准

软件研发项目编码规范与开发标准

软件研发项目编码规范与开发标准在软件研发项目中,编码规范与开发标准是至关重要的。

良好的编码规范可以增加代码的可读性和可维护性,提高团队合作效率,降低软件开发的错误率。

本文将探讨软件研发项目中编码规范与开发标准的重要性,并介绍一些常用的编码规范和开发标准。

首先,编码规范是指在软件开发过程中制定的一系列规则和约定,用来规范开发人员编写代码的风格和格式。

良好的编码规范可以使代码更易于阅读和理解,减少代码的bug和错误。

此外,编码规范还可以统一团队成员的编码习惯,提高团队合作效率。

因此,一个团队如果能够遵守一套统一的编码规范,在软件开发过程中将会更加高效和顺畅。

其次,开发标准是指在软件开发项目中约定的一套规范和标准,用来指导开发人员在软件开发过程中的行为和决策。

开发标准可以包括项目的架构设计、模块划分、代码管理、测试方法等方面的规范。

遵守开发标准可以确保项目的稳定性和可靠性,提高软件的质量和性能。

在实际的软件研发项目中,编码规范和开发标准起到了至关重要的作用。

在编写代码时,开发人员需要遵守统一的编码规范,确保代码的格式、命名规范、注释等方面符合规范要求。

在项目的架构设计和模块划分阶段,开发人员需要按照约定的开发标准进行规划和设计,确保项目的整体结构和组织清晰明了。

为了有效地制定和实施编码规范与开发标准,团队可以通过以下几个方面进行改进:1. 建立统一的编码规范和开发标准:团队需要制定一套统一的编码规范和开发标准,确保所有成员遵守相同的规范。

这些规范可以包括代码的格式、命名规范、注释规范等方面的要求。

2. 培训和指导开发人员:团队可以组织相关的培训和指导活动,帮助开发人员了解并遵守编码规范和开发标准。

通过培训,开发人员可以更好地理解规范的重要性,提高代码编写的质量和效率。

3. 使用自动化工具检查代码规范:团队可以借助一些自动化工具,如代码静态分析工具,来检查代码是否符合编码规范和开发标准。

这些工具可以帮助团队及时发现和纠正代码中的问题,提高代码的质量和可维护性。

软件编码设计标准规范

软件编码设计标准规范

软件编码设计规范1.1.编写目的:使用统一编码约定集的主要原因,是使应用程序的结构和编码风格标准化,以便于阅读和理解这段编码。

好的编码约定可使源代码严谨、可读性强且意义清楚,与其它语言约定相一致,并且尽可能的直观。

一组通用目的的编码约定应该定义完成上述目的所必需的、能让程序员自由地创建程序逻辑和功能流程的最小的要求。

编码约定的目的是使程序易于阅读和理解,而不是用过份的约束和绝对的限制来束缚程序员本身的创造性。

1.2内容:程序设计语言的特性和风格会直接影响到软件的质量和可维护性。

编码原则:应尽量避免在系统初始化时运行过多的代码。

(此处加入详细原则)(1)选用控制结构只准许一个入口和一个出口。

(2)程序语句组成容易识别的块,每块只有一个入口和一个出口。

(3)复杂的结构应该用基本控制结构进行组合嵌套来实现。

(4)语句中没有的控制结构,可用一段等价的程序段模拟,但要求该程序段在整个系统应前后一致。

(5)严格控制GOTO语句,仅在下列情形才可使用。

◆用一个非结构化的程序设计语言去实现一个结构化的构造。

◆在某种可以改善而不是损害程序可读性的情况下。

说明:如果是不需要对其编码的对象,那么对象名用默认对象名。

应该用一致的前缀来命名对象,使人们容易识别对象的类型。

下面列出了 Delphi 支持的一些推荐使用的对象约定。

(1)推荐使用的项目前缀(3)推荐使用的数据访问对象的前缀一些例子:(此处加入例子)(4)推荐使用的菜单前缀应用程序频繁使用许多菜单控件,对于这些控件具备一组唯一的命名约定很实用。

除了最前面 "mnu" 标记以外,菜单控件的前缀应该被扩展:对每一级嵌套增加一个附加前缀,将最终的菜单的标题放在名称字符串的最后。

下表列出了一些例子。

菜单标题序列菜单处理器名称(此处加入标题序列及处理器名称)当使用这种命名约定时,一个特定的菜单组的所有成员一个接一个地列在 Visual Basic 的“属性”窗口中。

软件设计开发管理制度之二软件设计编码管理规范

软件设计开发管理制度之二软件设计编码管理规范

软件设计编码管理规范1.1.编写目的:使用统一编码约定集的主要原因,是使应用程序的结构和编码风格标准化,以便于阅读和理解这段编码。

好的编码约定可使源代码严谨、可读性强且意义清楚,与其它语言约定相一致,并且尽可能的直观。

一组通用目的的编码约定应该定义完成上述目的所必需的、能让程序员自由地创建程序逻辑和功能流程的最小的要求。

编码约定的目的是使程序易于阅读和理解,而不是用过份的约束和绝对的限制来束缚程序员本身的创造性。

1.2内容:程序设计语言的特性和风格会直接影响到软件的质量和可维护性。

编码原则:应尽量避免在系统初始化时运行过多的代码。

(此处加入详细原则)(1)选用控制结构只准许一个入口和一个出口。

(2)程序语句组成容易识别的块,每块只有一个入口和一个出口。

(3)复杂的结构应该用基本控制结构进行组合嵌套来实现。

(4)语句中没有的控制结构,可用一段等价的程序段模拟,但要求该程序段在整个系统应前后一致。

(5)严格控制GOTO语句,仅在下列情形才可使用。

◆用一个非结构化的程序设计语言去实现一个结构化的构造。

◆在某种可以改善而不是损害程序可读性的情况下。

说明:如果是不需要对其编码的对象,那么对象名用默认对象名。

应该用一致的前缀来命名对象,使人们容易识别对象的类型。

下面列出了 Delphi 支持的一些推荐使用的对象约定。

(1)推荐使用的项目前缀(3)推荐使用的数据访问对象的前缀一些例子:(此处加入例子)(4)推荐使用的菜单前缀应用程序频繁使用许多菜单控件,对于这些控件具备一组唯一的命名约定很实用。

除了最前面 "mnu" 标记以外,菜单控件的前缀应该被扩展:对每一级嵌套增加一个附加前缀,将最终的菜单的标题放在名称字符串的最后。

下表列出了一些例子。

菜单标题序列菜单处理器名称(此处加入标题序列及处理器名称)当使用这种命名约定时,一个特定的菜单组的所有成员一个接一个地列在 Visual Basic 的“属性”窗口中。

软件开发编码规范说明

软件开发编码规范说明

软件开发编码规范说明2017软件开发编码规范说明梁峰2017-5-31一、高级语言 (2)1.1适用范围 (2)1.2程序风格 (2)1.2.1.代码缩进 (2)1.2.2.变量申明 (2)1.2.3.代码块长度 (2)1.2.4.代码换行 (2)1.2.5.空行及空格 (3)1.3命名 (3)1.3.1.变量命名 (3)1.3.2.常量命名 (4)1.3.3.函数或方法命名 (4)1.3.4.文件命名 (4)1.4注释 (5)1.4.1.代码注释 (5)1.4.2.变量注释 (5)1.4.3.函数注释 (5)1.4.4.文件注释 (6)1.5错误和异常处理 (6)1.5.1.错误处理 (6)1.5.2.异常处理 (6)1.6注意事项 (8)1.6.1.变量的使用 (8)1.6.2.代码实现 (9)1.7日志规约 (9)二、结构化查询语言 (11)2.1.程序风格 (11)2.1.1.SQL语句 (11)2.1.2.存储过程 (13)2.1.3.存储过程命名 (13)2.1.4.变量命名 (13)2.1.5.游标命名 (13)2.1.6.常量命名 (13)2.2.建表规约 (13)2.1.安全规约 (15)2.3.注释 (16)2.3.1.代码注释 (16)2.3.2.存储过程注释 (17)2.3.3.常量及变量注释 (17)2.4.错误和和异常处理 (17)2.5.注意事项 (18)一、高级语言1.1适用范围主要针对JSP,CSS和JAVA高级编程语言,其它高级语言可参照执行。

1.2程序风格1.2.1.代码缩进程序块(包括函数、过程、结构的定义及循环、判断等语句)要严格采用缩进风格编写,对齐只使用空格键,不使用TAB键,所有的缩进为4个空格。

1.2.2.变量申明在函数内部申明变量时,必须在函数的开始位置。

1.2.3.代码块长度单个函数的程序行数不得超过200行。

一个程序文件的长度不得超过5000行代码。

软件编码规范.doc

软件编码规范.doc

软件编码规范文件状态:[√] 草稿[ ] 正式发布[ ] 正在修改文件编号:RDC-DED-SCS-SPC-00 当前版本:作者:审核人:完成日期:中国人民银行清算总中心支付系统开发中心版本编号变化状态简要说明日期变更人批准日期批准人注:变化状态:A—增加,M—修改,D—删除目录第一篇C/C++编码规范 (6)第一章代码组织 (6)第二章命名 (9)2.1文件命名 (9)2.2变量命名 (9)2.3常量与宏命名 (10)2.4类命名 (10)2.5函数命名 (10)2.6参数命名 (11)第三章注释 (12)3.1文档化注释 (12)3.2语句块注释 (17)3.3代码维护注释 (20)第四章编码风格 (22)4.1排版风格 (22)4.2头文件 (26)4.3宏定义 (27)4.4变量与常量 (30)4.5条件判断 (32)4.6空间申请与释放 (33)4.7函数编写 (33)4.8类的编写 (37)4.9异常处理 (40)4.10特殊限制 (40)第五章编译 (41)第六章ESQL/C编码 (46)第二篇JAVA编码规范 (47)第一章代码组织 (48)第二章命名 (51)2.1包命名 (51)2.2类命名 (51)2.3接口命名 (51)2.4方法命名 (51)2.5变量命名 (51)2.6类变量命名 (52)2.7常量命名 (52)2.8参数命名 (52)第三章注释 (53)3.1文档化注释 (53)3.2语句块注释 (57)3.3代码维护注释 (59)第四章编码风格 (61)4.1排版风格 (61)4.2包与类引用 (66)4.3变量与常量 (66)4.4类编写 (67)4.5方法编写 (68)4.6异常处理 (71)4.7特殊限制 (71)第五章编译 (73)第六章JSP编码 (74)6.1文件命名及存放位置 (74)6.2内容组织 (74)6.3编码风格 (76)6.4注释 (78)6.5缩进与对齐 (78)6.6表达式 (79)6.7JavaScript (79)第三篇POWERBUILDER编码规范 (80)第一章代码组织 (81)第二章命名 (82)2.1文件命名 (82)2.2对象命名 (82)2.3变量命名 (84)2.4常量命名 (85)2.5函数与事件命名 (85)2.6参数命名 (85)第三章注释 (85)3.1文档化注释 (85)3.2语句块注释 (88)3.3代码维护注释 (88)第四章编码风格 (89)4.1界面风格 (89)4.2排版风格 (93)4.3变量与常量 (95)4.4条件判断 (96)4.5空间申请与释放 (97)4.6函数编写 (97)4.7特殊限制 (97)第五章SQL编码 (98)前言程序编码是一种艺术,既灵活又严谨,充满了创造性与奇思妙想。

软件开发编码及命名规范

软件开发编码及命名规范

软件开发编码及命名规范1.目的为了保证企业编写出的程序都符合相同的规范,保证一致性、统一性而建立的程序编码规范。

2.范围适用于企业所有基于.NET平台的软件开发工作。

3.规范内容3.1.代码格式所有的缩进为4个空格,使用的默认设置。

在代码中垂直对齐左括号和右括号。

if(x==0){Response.Write("用户编号必须输入!");}不允许以下情况:if(x==0) {Response.Write("用户编号必须输入!"); }或者:if(x==0){ Response.Write("用户编号必须输入!");}为了防止在阅读代码时不得不滚动源代码编辑器,每行代码或注释在1024*800的显示频率下不得超过一显示屏当一行被分为几行时,通过将串联运算符放在每一行的末尾而不是开头,清楚地表示没有后面的行是不完整的。

每一行上放置的语句避免超过一条。

在大多数运算符之前和之后使用空格,这样做时不会改变代码的意图却可以使代码容易阅读。

例:int j = i + k;而不应写为int j=i+k;将大的复杂代码节分为较小的、易于理解的模块。

编写SQL语句时,对于关键字使用全部大写,对于数据库元素(如表、列和视图)使用大小写混合。

将每个主要的SQL子句放在不同的行上,这样更容易阅读和编辑语句,例如: SELECT FirstName, LastNameFROM CustomersWHERE State = 'WA'3.2.注释(Comment)规范注释规范包括:模块(类)注释规范、类的属性、方法注释规范、代码间注释3.2.1.模块(类)注释规范模块开始必须以以下形式书写模块注释:///<summary>///模块编号:<模块编号,可以引用系统设计中的模块编号>///作用:<对此类的描述,可以引用系统设计中的描述>///作者:作者中文名///编写日期:<模块创建日期,格式:YYYY-MM-DD>///</summary>如果模块有修改,则每次修改必须添加以下注释:///<summary>///Log编号:<Log编号,从1开始一次增加>///修改描述:<对此修改的描述>///作者:修改者中文名///修改日期:<模块修改日期,格式:YYYY-MM-DD>///</summary>3.2.2.类属性注释规范在类的属性必须以以下格式编写属性注释:/// <summary>///属性说明/// </summary>3.2.3.方法注释规范在类的方法声明前必须以以下格式编写注释/// <summary>/// 说明:<对该方法的说明>/// </summary>/// <param name="<参数名称>"><参数说明></param>/// <returns>///<对方法返回值的说明,该说明必须明确说明返回的值代表什么含义> /// </returns>3.2.4.代码间注释规范代码间注释分为单行注释和多行注释:单行注释: //<单行注释>多行注释:/*多行注释1多行注释2多行注释3*/代码中遇到语句块时必须添加注释(if,for,foreach,……),添加的注释必须能够说明此语句块的作用和实现手段(所用算法等等)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

"\n"。

HTML Tab。

作遵循下面列出的准则有利于编写更加安全的代码。

但是总体来说,这些准则不能对安全性做出任何保证。

遵循这些准则可能好的实践,但是即使遵循了这些准则,写出的代码仍然可能是不安全的。

风险永远存在,不管在编写代码时是如何的警觉。

这些准则的目标,不是为了保证代码的安全性,而是为了消除若干特定类型攻击带来的风险。

遵循这些准则,某些特定类型的攻击将无法实现;但是其它类型的攻击仍然可能成功。

因此遵循这些准则仅仅是安全的第一步。

当书写可能和非守信链接或混用的代码时,应当仔细的考虑如下准则:⏹静态字段⏹缩小作用域⏹公共方法和字段⏹保护包⏹尽可能使对象不可变(immutable)⏹序列化⏹清除敏感信息1) 静态字段避免使用非final的公共静态变量,应尽可能地避免使用非final公共静态变量,因为无法判断代码有无权限改变这些静态变量的值。

一般地,应谨慎使用可变的静态状态,因为这可能导致设想中应该相互独立的子系统之间发生不曾预期的交互。

2) 缩小作用域作为一个惯例,尽可能缩小成员方法和成员变量的作用域。

检查包访问权限成员(package-private)能否改成私有成员(private),保护访问成员(protected)可否改成包访问权限成员(package-private)/私有成员(private)等等。

3) 公共方法/字段公共变量应当避免使用,访问这些变量时应当通过getter/setter法。

在这种方式下,必要时可以增加集中的安全检查。

任何能够访问或修改任何敏感内部状态的公共方法,务必包含安全检查。

参考如下代码段,该代码段中不可信任代码可能修改TimeZone的值:private static TimeZone defaultZone = null;public static synchronized void setDefault(TimeZone zone){defaultZone = zone;4) 保护包有时需要整体上保护一个包以避免不可信任代码的访问,本节描述了一些防护技术:◆防止包注入:如果不可信任代码想要访问类的包保护成员,可能通过在被攻击的包内定义自己的新类用以获取这些成员的访问权的方式。

防止这类攻击的方式有两种:a. 通过向java.security.properties文件中加入如下文字防止包内被注入恶意类。

当检测到代码试图在包内定义新类时,类装载器的defineClass方法会抛出异常,除非代码被赋予以下权限:b. 另一种方式是通过将包放到封闭的JAR(sealed Jar)文件里。

(参看/j2se/sdk/1.2/docs/guide/extensions/spec.html)通过使用这种技巧,代码无法获得扩展包的权限,因此也无须修改java.security.properties文件。

◆防止包访问:可以通过限制包访问但同时仅赋予特定代码访问权限防止不可信任代码对包成员的访问。

通过向java.security.properties文件中加入如下文字可以达到这一目的:当检测到代码试图访问上述包中的类时,类加载器的loadClass方法会抛出异常,除非代码被赋予以下权限:5) 尽可能使对象不可变(immutable)尽可能使对象不可变。

如果对象必须改变,使得它们可以克隆并在方法调用时返回副本。

如果方法调用的返回对象是数组、向量或哈希表等,牢记这些对象并非不可变,调用者可以修改这些对象的内容并导致安全漏洞。

此外,不可变的对象因为不用上锁所以能够提高并发性。

不要返回包含敏感数据的内部数组引用。

这个不可变惯例的变型,在这儿提出是因为是个常见错误。

即使数组中包含不可变的对象比如说是字符串,也要返回一个副本,这样调用者不能修改数组中包含的到底是哪个字符串。

在方法调用返回时,返回数据的拷贝而不要返回数组。

6) 不要直接在用户提供的数组里存储这是不可变惯例的另一个变型。

构造器和方法可以接受对象数组,比如说PubicKey数组,这个数据存储到内部之前应当克隆,并保存克隆后的数据,而不是直接将数组引用赋给同样类型的内部变量。

如果缺少这个步骤,在使用了有问题的构造器创建了对象后,用户对外部数组所作的任何修改都将更改对象的内部状态,尽管对象应该是不可变的。

7) 序列化对象在序列化后、反序列化之前,都不在Java运行时环境的控制之下,也因此不在Java 平台提供的安全控制范围内。

在实现接口Serializable时务必将以下事宜牢记在心:◆transient直接引用系统资源的句柄和包含了地址空间相关信息的字段应当使用关键字transient 修饰。

资源,如文件句柄,如果不被声明为transient,该对象在序列化状态下可能会被修改,从而在被反序列化后获取对资源的不当访问。

◆特定类的序列化/反序列化方法为了确保反序列化对象不包含违反一些不变量集合的状态,类应该定义自己的反序列化方法并使用接口ObjectInputValidation验证这些变量。

如果一个类定义了自己的序列化方法,它就不能向任何DataInput/DataOuput方法传递内部数组。

所有的DataInput/DataOuput方法都能被重写。

注意默认序列化不会向DataInput/DataOuput字节数组方法暴露私有字节数组字段。

如果Serializable类直接向DataOutput(write(byte [] b))方法传递了一个私有数组,那么黑客可以创建ObjectOutputStream的子类并覆盖write(byte [] b)方法,这样他可以访问并修改私有数组。

下面示例说明了这个问题。

示例类:public class YourClass implements Serializable {private byte [] internalArray;....private synchronized void writeObject(ObjectOutputStream stream) {...stream.write(internalArray);...}}黑客代码:public class HackerObjectOutputStream extends ObjectOutputStream{public void write (byte [] b) {Modify b}}...YourClass yc = new YourClass();...HackerObjectOutputStream hoos = new HackerObjectOutputStream();hoos.writeObject(yc);◆字节流加密另一种保护位于虚拟机之外的字节流的方式是对序列化产生的流进行加密。

字节流加密可以防止解码和读取被序列化对象的私有状态。

如果决定加密,需要管理好密钥,密钥的存储以及密钥交付给反序列化程序的方式,等等。

◆需要注意的其它事宜如果不可信任代码在创建对象时受到约束,务必确保不可信任代码在反序列化对象时受到相同的约束。

牢记对象反序列化是创建对象的另一途径。

比如说,如果applet创建了frame,在该frame上创建了警告标签。

如果该frame被应用程序序列化并被applet反序列化,务必使该frame在反序列化后标有相同的警告标签。

8) 本地方法应从以下几个方面检查本地方法:⏹返回什么⏹需要什么参数⏹是否绕过了安全检查⏹是否是公共的,私有的等⏹是否包含能绕过包边界的方法调用,从而绕过包保护9) 清除敏感信息当保存敏感信息时,如信用信息,尽量保存在如数组这样的可变数据类型中,而不是保存在字符串这样的不可变对象中,这样使得敏感信息可以尽早显式地被清除。

不要指望Java 平台的自动垃圾回收来做这种清除,因为回收器可能不会清除这段内存,或者很久后才会回收。

尽早清除信息使得来自虚拟机外部的堆检查攻击变得困难。

3. 数据库安全1) 开发人员应尽量使用PreparedStatement,并且使用占位符?来表示参数。

在使用set命令时,数据库驱动程序会对参数中的关键字进行转义。

严格禁止将参数和SQL语句做拼接。

2) 只给数据库用户授予其需要的最小权限,以保障数据库服务器的安全。

3) 当使用JDBC操作数据库时,涉及到的资源包括ResultSet、Statement、Connection都必须及时关闭。

4) ResultSet、PreparedStatement、Connection必须依次关闭,同时三者的close方法都应提示异常,且每个close方法都必须用try、catch来实现。

5) 数据库关闭的原则是:谁创建的资源,谁负责关闭。

6) 应在try代码块中及时关闭数据库资源,同时finally的代码块中也要关闭资源,或者将一个try代码块拆分为多个try代码块,保证每个资源都能在使用完以后立即关闭。

7) 数据库表名、字段名必须大写。

8) 对于返回较大结果集的查询,必须禁止SELECT *,在其他查询中也应避免使用。

9) 编写可以移植的SQL语句,原则如下:●不得使用某个数据库专用的关键字、函数等;●当必须要使用某个数据库特定的特性时,需在程序运行时,先判断当前数据库的类型,然后再根据数据的不同使用其特性;●可以使用各种数据库都支持的函数包括MIN、MAX、AVG、COUNT;●尽量使用简单的SQL语句,当因为特殊情况需要使用非常见SQL语句时,应该在多种数据库下测试。

10) 优化SQL语句时开发人员应遵循以下原则:●使用合适的SQL语句以避免不必要的关联;●使用JDBC批量更新来优化insert和update的性能;●必要时可以使用对象缓存技术,但是技术方案需要通过讨论并且获得批准后方可执行。

11) 不得将数据库的用户名和密码以明文形式存储在配置文件中。

12) 对于存储于数据库中的重要数据以密文形式存放,可以大大增强数据的安全性。

4.WEB安全1) 独立、完整且集中的输入验证2) 校验全部的程序输入3) 校验全部的输入长度4) 校验全部的输入类型5) 不使用任何方式处理失败的数据6) 对HTTP所有内容进行校验7) 校验向用户输出的数据8) 只相信服务器端校验,客户端校验只能作为补充9) 使用安全、统一的编码或转义方式10) 设定有安全的权限边界11) 校验被调用的后台命令12) 校验被调用的文本或配置文件13) 在HTML中,一些特殊字符在页面上显示时必须转义。

14) 用户界面须支持主流浏览器,避免因某类浏览器的安全问题或者在非IE浏览器下用户界面不能常驻。

15) 用户界面应该包含公司或者产品标识。

16) 尽量使用POST 而不是GET方式。

相关文档
最新文档