`

【Java核心-安全基础】编写安全的Java代码

    博客分类:
  • Java
 
阅读更多

实现安全的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语言来构建一个简单的浏览器,这提供了一个独特的学习机会,让我们深入了解网络通信的基础,特别是关于socket编程的知识。 首先,Java是一种跨平台的编程语言,以其丰富的类库和强大的...

    精通Java--JDK、数据库系统开发、Web开发基础与实例

    同时,书中会讲解如何编写注释、异常处理机制,以及如何进行代码调试,这些都是编写高质量Java代码的必备知识。 面向对象是Java的核心特性,本书将详细讲解面向对象软件设计方法,包括类与对象、封装、继承、多态等...

    java代码-使用java解决计算闰年的判断的问题的源代码

    java代码-使用java解决计算闰年的判断的问题的源代码 ——学习参考资料:仅用于个人学习使用!

    JAVA程序员必读--基础篇chm

    "JAVA程序员必读--基础篇chm"这个压缩包文件显然是为那些想要深入理解Java编程基础知识的开发者准备的。CHM(Compiled Help Manual)是一种常见的Windows帮助文档格式,通常包含一系列章节和索引,便于读者按需查阅...

    eclipse-java-2020-09-R-win32-x86_64.zip

    Eclipse是一个强大的平台,提供了一整套工具,如源代码编辑器、调试器、构建工具等,以帮助开发者高效地编写、测试和调试Java代码。它支持多种插件,可以扩展其功能以适应不同的开发需求,比如Web应用、移动应用或者...

    java-se基础代码练习 Java学习资料

    这份"java-se基础代码练习"的资源集合,旨在帮助初学者和进阶者深入理解Java编程语言的基础概念,通过实践来巩固理论知识。 在Java学习过程中,基础至关重要。首先,你需要了解Java的语法结构,包括类、对象、变量...

    JAVA核心技术第1卷:基础知识(原书第8版)--英文书和源代码

    《JAVA核心技术第1卷:基础知识(原书第8版)》是Java编程领域的经典教材,专为初学者设计,旨在全面、深入地介绍Java编程语言的基础概念和技术。这本书覆盖了从基本语法到面向对象编程的核心内容,对于想要踏入Java...

    java-1.8.0-openjdk.linux.x86_64

    其中,JVM是Java的核心,它负责解析和执行字节码,使得Java程序可以在任何支持Java的平台上运行,实现了“一次编写,到处运行”的理念。 OpenJDK 1.8.0 版本包含了Java语言的关键特性,如泛型、枚举、匿名内部类、...

    java-se基础练习代码 Java学习资料

    通过实际编写和运行这些代码,你可以更好地理解和掌握Java SE的基础知识。每个子文件可能代表一个特定的概念或技术,例如,一个文件可能专注于数组的操作,另一个则可能演示如何使用集合框架。通过这些实践,你可以...

    Android逆向-java代码基础(4)

    在Android逆向工程中,Java代码基础扮演着至关重要的角色,因为大部分的Android应用都是用Java语言编写的。本文将深入探讨Java代码基础在Android逆向中的应用,并结合"Android逆向-java代码基础(4)"这个主题进行...

    java-sdk-4.11.0.jar.zip

    2. **Java运行时环境**(JRE):包括Java虚拟机(JVM)和Java核心类库,使得Java程序可以在任何支持Java的平台上运行。 3. **Java开发工具**(JDK工具):如`jar`命令用于创建、管理和提取JAR文件,`javadoc`用于...

    ckeditor-java-core-3.5.3

    此外,还可能有CKEditor的核心JavaScript文件、样式表、语言包以及用于服务器端交互的Java类。 4. **配置和使用** 使用CKEditor时,开发者需要在HTML页面中嵌入编辑器的JavaScript代码,并在服务器端配置相应的...

    深入体验Java Web开发内幕-核心基础.pdf

    JSP则是一种视图技术,它允许将HTML代码与Java代码混合编写,提高了Web页面的可维护性和可读性。JSP最终会被编译成Servlet,因此二者在本质上是紧密相关的。 接着,我们不能忽视Java的MVC(Model-View-Controller)...

    JAVA基础-初识JAVA

    8. **开发工具**:`Notepad_6.4.5.exe`可能是Notepad++编辑器,一个流行的源代码编辑器,适合编写Java程序。`jd-gui.exe`是Java反编译器,可以查看已编译的.class文件的源代码。 9. **学习资源**:`初识java.md`...

    基于Java的Javashop-eop Java开发框架.zip

    3. **Hibernate ORM**:JavaShop-eOP采用了Hibernate作为对象关系映射(ORM)工具,它简化了数据库操作,使开发者可以使用Java对象来处理数据库记录,减少了SQL代码的编写,提高了开发效率。 4. **前端技术**:虽然...

    java核心技术代码

    Java核心技术代码涵盖了许多Java编程语言的关键概念和应用,这些概念构成了Java开发的基础。在第二卷中,我们通常会深入探讨更高级的主题,包括面向对象编程的深入理解、集合框架、多线程、输入/输出(I/O)系统、网络...

    javacv-0.6-bin配合opencv2.4.6.0

    一旦配置完成,就可以通过Java代码直接调用OpenCV的函数,如加载图片、处理视频帧、实现特征匹配等。 例如,要使用JavaCV加载并显示一个图像,可以使用以下代码片段: ```java import org.bytedeco.javacpp.opencv...

    JAVA程序员必读--基础篇

    这意味着编写好的Java代码可以在任何支持Java的平台上运行,这得益于Java的跨平台特性。Java程序是由类组成的,这些类定义了数据和操作这些数据的方法。在Java中,一切皆为对象,这是面向对象编程的基础。 在Java...

    Java核心技术 第12版 开发基础+高级特性 英文原版

    《Java核心技术 第12版》是一本针对Java开发基础和高级特性的详尽教程,适合Java初学者和有经验的开发者。本版已更新至Java 17,涵盖了最新的语言特性。作者Cay S. Horstmann是美国圣何塞州立大学的计算机科学教授,...

    java核心卷答案(含源代码完整版)

    这份"java核心卷答案(含源代码完整版)"包含了针对Java初学者和进阶者的关键知识点的解答,以及相应的源代码实现,对于学习和巩固Java基础知识非常有帮助。下面,我们将深入探讨这些关键知识点。 1. **基础语法**...

Global site tag (gtag.js) - Google Analytics