资源描述:
《安全编码规范.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、安全编码规范版本号:V1.0第22页修订页编号章节名称修订内容简述修订日期修订前版本号修订后版本号修订人批准人第22页目录1目的52背景53安全编码规范53.1输入验证和数据合法性校验53.1.1避免SQL注入53.1.2避免XML注入53.1.3避免跨站点脚本(XSS)63.2声明和初始化63.2.1避免类初始化的相互依赖63.3表达式73.3.1不可忽略方法的返回值73.3.2不要引用空指针83.3.3使用Arrays.equals()来比较数组的内容83.4数字类型和操作83.4.1防止整数溢出83.4.2避免除法和取模运算分母为零93.5类和方法操作103.5
2、.1数据成员声明为私有,提供可访问的包装方法103.5.2敏感类不允许复制103.5.3比较类的正确做法103.5.4不要硬编码敏感信息113.5.5验证方法参数113.5.6不要使用过时、陈旧或低效的方法113.5.7数组引用问题113.5.8不要产生内存泄露123.6异常处理123.6.1不要忽略捕获的异常123.6.2不允许暴露异常的敏感信息133.6.3不允许抛出RuntimeException,Exception,Throwable143.6.4不要捕获NullPointerException或其他父类异常143.7多线程编程153.7.1确保共享变量的可见
3、性153.7.2确保共享变量的操作是原子的163.7.3不要调用Thread.run(),不要使用Thread.stop()以终止线程183.7.4确保执行阻塞操作的线程可以终止183.7.5相互依存的任务不要在一个有限的线程池执行193.8输入输出193.8.1程序终止前删除临时文件193.8.2检测和处理文件相关的错误193.8.3及时释放资源193.9序列化203.9.1不要序列化未加密的敏感数据20第22页3.9.2在序列化过程中避免内存和资源泄漏213.9.3反序列化要在程序最小权限的安全环境中22第22页1安全编码规范1.1输入验证和数据合法性校验程序接受
4、数据可能来源于未经验证的用户,网络连接和其他不受信任的来源,如果未对程序接受数据进行校验,则可能会引发安全问题。1.1.1避免SQL注入使用PreparedStatement预编译SQL,解决SQL注入问题,传递给PreparedStatement对象的参数可以被强制进行类型转换,确保在插入或查询数据时与底层的数据库格式匹配。 StringsqlString="select*fromdb_userwhereusername=?andpassword=?";PreparedStatementstmt=connection.prepareStatement(sqlStri
5、ng);stmt.setString(1,username);stmt.setString(2,pwd);ResultSetrs=stmt.executeQuery();1.1.2避免XML注入通过StringBulider或StringBuffer拼接XML文件时,需对输入数据进行合法性校验。对数量quantity进行合法性校验,控制只能传入0-9的数字:if(!Pattern.matches("[0-9]+",quantity)){//Formatviolation}StringxmlString="- Widget
6、cription>"+"500"+""+quantity+"
";outStream.write(xmlString.getBytes());outStream.flush();1.1.3避免跨站点脚本(XSS)对产生跨站的参数进行严格过滤,禁止传入