实现安全的Java代码,需要从功能设计到实现细节,都充分考虑可能的安全影响。
以消耗系统资源为目的的攻击是很常见的方式。
CPU、线程、内存、文件描述符、数据库连接、再入锁等各种资源都可能成为攻击者消耗的目标。
常见代码问题
数值运算溢出
如:
if (a+b<c) { ... }
a+b 可能超出上限。改成 a<c-b 也有溢出的风险。
需要根据各变量的范围进行处理。
异常中包含敏感信息
如:
try { ... } catch (Exception e) { throw new RuntimeException(hostname + port + " not available"); }
如果异常中包含了敏感信息,最终又未最好脱敏处理,就存在信息安全风险。
如果没有明确的必要性,一般不建议输出这些内部的敏感信息。
如,华为的“安全红线”就不允许日志中存在文件名等信息。
在一些安全标准特别高的系统中,敏感信息被使用后,需立即明确在内存中销毁,以免被探测或在core dump时意外暴露。
如,在使用密码的场景中,可以用 char[] 来临时存放密码,而不是String。
使用完后,用随机字符覆盖char[]。这样可以避免因String的不可变性,导致密码一直留在堆,直到被垃圾回收。
序列化安全
Java序列化也是安全问题频发的场景。
通常建议:
- 敏感信息不要被序列化。可以用transient关键字防止相关字段被序列化。
- 反序列化时,在readObject中实现与对象构建过程相同的安全检查和数据校验。
JDK 9 中还可以通过 ObjectInputFilter 来限定允许被序列化的类型(黑白名单)。
工程实践
代码安全问题细节繁杂,全凭人肉记忆很不现实。
在实际工程中,需借助工具和流程管控等综合处理。
可根据实际情况选择合适的方案,平衡安全与迭代节奏。
开发测试阶段
一些典型的做法:
-
早期设计阶段,由安全专家组对新特性进行风险评估。
很多组织并没有这个能力/资源做风险评估。
甚至关键决策人根本不具备这方面意识和能力。
全靠一线资深员工尽心尽责。
这种能力配不上职位的领导管理是非常危险的。 -
在开发过程及code review阶段,应用代码规范和相关工具进行检查。
《阿里巴巴Java开发手册》及相关配套工具就是常见工具之一。 - 利用多种静态分析工具,如 FindBugs,检查潜在的安全风险。
- JDK的警告也需要当作错误认真处理。
- 在代码提交入库等关键环节,利用hook机制调用检查工具,阻止不合规的代码入库。
静态分析工具并不需要大而全,“足够好”就行。没有工具能发现所有问题。
在保证功能的前提下,需考虑降低分析过程的噪音信息,提高分析效率。
部署阶段
JDK自身缺陷的处理可以算部署阶段的安全事务。
关注JDK更新的安全漏洞补丁并及时更新是安全管理的一部分。
对安全敏感的产品,还需关注JDK在加解密方面的路线图。
《Oracle JRE and JDK Cryptographic Roadmap》
相关推荐
java代码-使用java解决计算闰年的判断的问题的源代码 ——学习参考资料:仅用于个人学习使用!
Java核心技术(卷1):基础知识(原书第8版)是《java核心技术》的最新版,《java核心技术》出版以来一直畅销不衰,深受读者青睐,每个新版本都尽可能快地跟上java开发工具箱发展的步伐,而且每一版都重新改写了的部分...
jdbc核心代码,恰同学少年,风华正茂,挥斥方遒
Java 基础核心总结 java全方面基础知识 java开发人员必备 通过带着读者手写简化版 Spring 框架,了解 Spring 核心原理。在手写Spring 源码的过程中会摘取整体框架中的核心逻辑,简化代码实现过程,保留核心功能,...
Java核心技术 卷Ⅰ:基础知识 【中文】 第1章概述Java与其他程序设计语言不同的性能。解释这种语言的设计初衷,以及在哪些方 面达到了预期的效果。然后,简要叙述Java诞生和发展的历史。 第2章详细地论述如何下载和...
内容概要:通过带着读者基于...阅读建议:此资源以开发智慧园区综合管理系统学习其原理和内核,不仅是代码编写实现也更注重内容上的需求分析和方案设计,所以在学习的过程要结合这些内容一起来实践,并调试对应的代码。
Java核心技术卷II:高级特性(第9版英文版)(上、下册)专为做实际项目的程序员编写,是一本真实可信、不偏不倚且简单直接的Java教程,书中使用了全面测试过的代码示例来阐述关键的Java语言与库的特性,体现了最佳的...
jre:当一个电脑上面安装jre之后 只能运行java代码 2:设置环境变量 (环境变量可以不设置 为了简化开发流程 提高开发效率) 给谁使用 作用 PATH: 操作系统 让操作系统更加快捷的找到一个文件/命令 PATH=C:\...
本文档介绍了Java语言的一些基本特性和常见用法,并附带了一个简单的Java示例代码。 ...另外,建议您在阅读过程中结合实践,尝试编写并运行示例代码,加深对Java语言特性的理解,并提升编程能力。
一直以来,《Java核心技术》都被认为是面向高级程序员的经典教程和参考书,它内容翔实、客观准确,不拖泥带水,是想为实际应用编写健壮Java代码的程序员的首选。如今,本版进行了全面更新, 以反映近年来人们...
这个特征让Java程序员能够更加灵活地编写代码,并且简化了许多任务。 Java中有两种多态性:静态多态性和动态多态性。静态多态性是指方法重载,即在同一个类中定义多个名称相同但参数列表不同的方法。动态多态性则是...
(3)学习Java的核心概念:理解Java的核心概念,如面向对象编程、类、对象、继承、多态等,是学好Java的基础。 (4)学习常用的Java库和框架:了解Java的常用库和框架,如集合、I/O流、多线程等,可以帮助你更好地...
《Java高级程序设计实验代码-ServerSQL版-学员信息管理系统JAVAGUI实现.zip》是一份包含了学员信息管理系统的Java GUI实现代码的压缩文件。以下是对这个文件的500字描述: 这个压缩文件是一份极具价值的学习资源,...
使用JAVA语言编写的身份证认证系统的核心代码以及说明
《Java核心技术》出版以来一直畅销不衰,深受读者青睐,每个新版本都尽可能快地跟上Java开发工具箱发展的步伐,而且每一版都重新改写了部分内容,以便适应Java的最新特性。本版也不例外,它反映了JavaSE6的新特性。...
java多线程tcp socket server源码 ...--(编写代码过程中的一些最佳实践,注意事项。现在已经出第二版了,增加了lambada的内容) JAVA网络编程 第4版 --(BIO socket编程,现在基本不用了) 性能优化 Java性
java反编译源码京东核心 JD-Core 是用 JAVA 编写的 JAVA 反编译器。 Java Decompiler 项目主页: 京东核心源代码: JCenter Maven 存储库: 描述 JD-Core 是一个独立的 JAVA 库,包含“Java Decompiler 项目”的 ...
内容概要:通过程序注释带着读者了解GUI界面构建过程,初步了解 java GUI的使用,理解GUI框架中的核心逻辑,简化代码实现过程,保留核心功能,例如:登陆确认、随机出题、题目文本导入等内容实现。 适合人群:具备...