安全编码规范.docx
《安全编码规范.docx》由会员分享,可在线阅读,更多相关《安全编码规范.docx(25页珍藏版)》请在冰豆网上搜索。
安全编码规范
安全编码规范
版本号:
V1.0
页1第
修订页
编号
章节名称
修订内容简述
修订日期
修订前版本号
修订后版本号
修订人
批准人
页2第
1目的.........................................................................................................错误!
未定义书签。
背景2.........................................................................................................错误!
未定义书签。
安全编码规范3
...........................................................................................................................5
3.1输入验证和数据合法性校验.......................................................................................5
3.1.1避免SQL注入...................................................................................................5
3.1.2避免XML注入..................................................................................................5
3.1.3避免跨站点脚本(XSS).................................................................................5
3.2声明和初始化...............................................................................................................6
3.2.1避免类初始化的相互依赖...............................................................................6
3.3表达式...........................................................................................................................7
3.3.1不可忽略方法的返回值...................................................................................7
3.3.2不要引用空指针...............................................................................................7
3.3.3使用Arrays.equals()来比较数组的内容....................................................8
3.4数字类型和操作...........................................................................................................8
3.4.1防止整数溢出...................................................................................................8
3.4.2避免除法和取模运算分母为零.......................................................................9
3.5类和方法操作...............................................................................................................9
3.5.1数据成员声明为私有,提供可访问的包装方法...........................................9
3.5.2敏感类不允许复制...........................................................................................9
3.5.3比较类的正确做法.........................................................................................10
3.5.4不要硬编码敏感信息.....................................................................................10
3.5.5验证方法参数.................................................................................................10
3.5.6不要使用过时、陈旧或低效的方法.............................................................11
3.5.7数组引用问题.................................................................................................11
3.5.8不要产生内存泄露.........................................................................................11
3.6异常处理.....................................................................................................................12
3.6.1不要忽略捕获的异常.....................................................................................12
3.6.2不允许暴露异常的敏感信息.........................................................................12
3.6.3不允许抛出RuntimeException,Exception,Throwable...................................13
3.6.4不要捕获NullPointerException或其他父类异常.........................................14
3.7多线程编程.................................................................................................................15
3.7.1确保共享变量的可见性.................................................................................15
3.7.2确保共享变量的操作是原子的.....................................................................16
3.7.3不要调用Thread.run(),不要使用Thread.stop()以终止线程............17
3.7.4确保执行阻塞操作的线程可以终止.............................................................17
3.7.5相互依存的任务不要在一个有限的线程池执行.........................................18
3.8输入输出.....................................................................................................................18
3.8.1程序终止前删除临时文件.............................................................................18
3.8.2检测和处理文件相关的错误.........................................................................18
3.8.3及时释放资源.................................................................................................19
3.9序列化.........................................................................................................................20
3.9.1不要序列化未加密的敏感数据.....................................................................20
页3第
3.9.2在序列化过程中避免内存和资源泄漏.........................................................20
反序列化要在程序最小权限的安全环境中3.9.3
.................................................22
页4第
1安全编码规范1.1输入验证和数据合法性校验如果未对程序接受数据可能来源于未经验证的用户,网络连接和其他不受信任的来源,程序接受数据进行校验,则可能会引发安全问题。
1.1.1避免SQL注入传递给注入问题PreparedStatement预编译SQL解SQL使用PreparedStatement,决,确保在插入或查询数据时与底层的数据库格式匹配对象的参数可以被强制进行类型转换,。
StringsqlString=select*fromdb_userwhereusername=?
andpassword=?
;
PreparedStatementstmt=connection.prepareStatement(sqlString);
stmt.setString(1,username);
stmt.setString(2,pwd);
ResultSetrs=stmt.executeQuery();
1.1.2避免XML注入StringBuffer拼接XML文件时,需对输入数据进行合法性校验。
通过StringBulider或的数字:
0-9quantity进行合法性校验,控制只能传入对数量if(!
Pattern.matches([0-9]+,quantity)){
//Formatviolation
}
StringxmlString=- \nWidget\n+
500\n+
+quantity+;
outStream.write(xmlString.getBytes());
outStream.flush();
)XSS1.1.3避免跨站点脚本(对产生跨站的参数进行严格过滤,禁止传入标签