【例子介绍】华为-Java语言编程规范_安全篇_V2.0
【相关图片】
【源码结构】
目录
修订声明 PAGEREF _Toc394392174 \h 2
0 前言 PAGEREF _Toc394392175 \h 6
背景 PAGEREF _Toc394392176 \h 6
使用对象 PAGEREF _Toc394392177 \h 6
适用范围 PAGEREF _Toc394392178 \h 6
术语定义 PAGEREF _Toc394392179 \h 6
1 数据校验 PAGEREF _Toc394392180 \h 7
规则 1.1 校验跨信任边界传递的不可信数据 PAGEREF _Toc394392181 \h 7
规则 1.2 禁止直接使用不可信数据来拼接SQL语句 PAGEREF _Toc394392182 \h 8
规则 1.3 禁止直接使用不可信数据来拼接XML PAGEREF _Toc394392183 \h 12
规则 1.4 禁止直接使用不可信数据来记录日志 PAGEREF _Toc394392184 \h 15
规则 1.5 从格式化字符串中排除用户输入 PAGEREF _Toc394392185 \h 16
规则 1.6 禁止向Runtime.exec() 方法传递不可信、未净化的数据 PAGEREF _Toc394392186 \h 17
规则 1.7 验证路径之前应该先将其标准化 PAGEREF _Toc394392187 \h 18
规则 1.8 安全地从ZipInputStream提取文件 PAGEREF _Toc394392188 \h 20
2 异常行为 PAGEREF _Toc394392189 \h 23
规则 2.1 不要抑制或者忽略已检查异常 PAGEREF _Toc394392190 \h 23
规则 2.2 禁止在异常中泄露敏感信息 PAGEREF _Toc394392191 \h 25
规则 2.3 方法发生异常时要恢复到之前的对象状态 PAGEREF _Toc394392192 \h 28
3 I/O操作 PAGEREF _Toc394392193 \h 30
规则 3.1 临时文件使用完毕应及时删除 PAGEREF _Toc394392194 \h 30
规则 3.2 不要将Buffer对象封装的数据暴露给不可信代码 PAGEREF _Toc394392195 \h 32
规则 3.3 在多用户系统中创建文件时指定合适的访问许可 PAGEREF _Toc394392196 \h 34
规则 3.4 避免让外部进程阻塞在输入输出流上 PAGEREF _Toc394392197 \h 34
规则 3.5 避免在共享目录操作文件 PAGEREF _Toc394392198 \h 36
4 序列化和反序列化 PAGEREF _Toc394392199 \h 40
规则 4.1 将敏感对象发送出信任区域前进行签名并加密 PAGEREF _Toc394392200 \h 40
规则 4.2 禁止序列化未加密的敏感数据 PAGEREF _Toc394392201 \h 43
规则 4.3 防止序列化和反序列化被利用来绕过安全管理 PAGEREF _Toc394392202 \h 45
5 平台安全 PAGEREF _Toc394392203 \h 46
规则 5.1 使用安全管理器来保护敏感操作 PAGEREF _Toc394392204 \h 46
规则 5.2 防止特权区域内出现非法的数据 PAGEREF _Toc394392205 \h 47
规则 5.3 禁止基于不信任的数据源做安全检查 PAGEREF _Toc394392206 \h 49
规则 5.4 禁止特权块向非信任域泄漏敏感信息 PAGEREF _Toc394392207 \h 50
规则 5.5 编写自定义类加载器时应调用超类的getPermission()函数 PAGEREF _Toc394392208 \h 52
规则 5.6 避免完全依赖URLClassLoader和java.util.jar提供的默认自动签名认证机制 PAGEREF _Toc394392209 \h 53
6 运行环境 PAGEREF _Toc394392210 \h 55
规则 6.1 禁止给仅执行非特权操作的代码签名 PAGEREF _Toc394392211 \h 55
规范 6.2 不要使用危险的许可与目标组合 PAGEREF _Toc394392212 \h 55
规则 6.3 不要禁用字节码验证 PAGEREF _Toc394392213 \h 56
规则 6.4 禁止部署的应用可被远程监控 PAGEREF _Toc394392214 \h 56
规则 6.5 将所有安全敏感代码都放在一个jar包中,签名再加密 PAGEREF _Toc394392215 \h 57
规则 6.6 不要信任环境变量的值 PAGEREF _Toc394392216 \h 59
规则 6.6 生产代码不能包含任何调试入口点 PAGEREF _Toc394392217 \h 59
7 其他 PAGEREF _Toc394392218 \h 60
规则 7.1 禁止在日志中保存口令、密钥和其他敏感数据 PAGEREF _Toc394392219 \h 60
规则 7.2 禁止使用私有或者弱加密算法 PAGEREF _Toc394392220 \h 60
规则 7.3 基于哈希算法的口令安全存储必须加入盐值(salt) PAGEREF _Toc394392221 \h 60
规则 7.4 禁止将敏感信息硬编码在程序中 PAGEREF _Toc394392222 \h 61
规则 7.5 使用强随机数 PAGEREF _Toc394392223 \h 62
规则 7.6 防止将系统内部使用的锁对象暴露给不可信代码 PAGEREF _Toc394392224 \h 63
规则 7.7 使用SSLSocket代替Socket来进行安全数据交互 PAGEREF _Toc394392225 \h 64
规则 7.8 封装本地方法调用 PAGEREF _Toc394392226 \h 66
参考资料 PAGEREF _Toc394392227 \h 67
附录A PAGEREF _Toc394392228 \h 67
附录B PAGEREF _Toc394392229 \h 68
附录C PAGEREF _Toc394392230 \h 68
评论