`

【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解决计算闰年的判断的问题的源代码

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

    java核心技术-基础知识(第八版)

    Java核心技术(卷1):基础知识(原书第8版)是《java核心技术》的最新版,《java核心技术》出版以来一直畅销不衰,深受读者青睐,每个新版本都尽可能快地跟上java开发工具箱发展的步伐,而且每一版都重新改写了的部分...

    jdbc核心代码.docx

    jdbc核心代码,恰同学少年,风华正茂,挥斥方遒

    Java 基础核心总结 java全方面基础知识 java开发人员必备

    Java 基础核心总结 java全方面基础知识 java开发人员必备 通过带着读者手写简化版 Spring 框架,了解 Spring 核心原理。在手写Spring 源码的过程中会摘取整体框架中的核心逻辑,简化代码实现过程,保留核心功能,...

    Java核心技术 卷Ⅰ:基础知识 【中文】(第八版)

    Java核心技术 卷Ⅰ:基础知识 【中文】 第1章概述Java与其他程序设计语言不同的性能。解释这种语言的设计初衷,以及在哪些方 面达到了预期的效果。然后,简要叙述Java诞生和发展的历史。 第2章详细地论述如何下载和...

    JavaWeb基于NB-IOT的智慧园区综合管理系统设计

    内容概要:通过带着读者基于...阅读建议:此资源以开发智慧园区综合管理系统学习其原理和内核,不仅是代码编写实现也更注重内容上的需求分析和方案设计,所以在学习的过程要结合这些内容一起来实践,并调试对应的代码。

    java核心技术·卷II·高级特征(第9版·英文版)及源码

     Java核心技术卷II:高级特性(第9版英文版)(上、下册)专为做实际项目的程序员编写,是一本真实可信、不偏不倚且简单直接的Java教程,书中使用了全面测试过的代码示例来阐述关键的Java语言与库的特性,体现了最佳的...

    corejava基础重要知识点总结

    jre:当一个电脑上面安装jre之后 只能运行java代码 2:设置环境变量 (环境变量可以不设置 为了简化开发流程 提高开发效率) 给谁使用 作用 PATH: 操作系统 让操作系统更加快捷的找到一个文件/命令 PATH=C:\...

    Java零基础 - Java语言特性简介.md

    本文档介绍了Java语言的一些基本特性和常见用法,并附带了一个简单的Java示例代码。 ...另外,建议您在阅读过程中结合实践,尝试编写并运行示例代码,加深对Java语言特性的理解,并提升编程能力。

    Java核心技术 卷I 基础知识 原书第10版.z02高清PDF(第二部分)

    一直以来,《Java核心技术》都被认为是面向高级程序员的经典教程和参考书,它内容翔实、客观准确,不拖泥带水,是想为实际应用编写健壮Java代码的程序员的首选。如今,本版进行了全面更新, 以反映近年来人们...

    JAVA核心知识点整理.pdf

    这个特征让Java程序员能够更加灵活地编写代码,并且简化了许多任务。 Java中有两种多态性:静态多态性和动态多态性。静态多态性是指方法重载,即在同一个类中定义多个名称相同但参数列表不同的方法。动态多态性则是...

    《Java基础入门(第3版)》(Java):课后答案-docx文档

    (3)学习Java的核心概念:理解Java的核心概念,如面向对象编程、类、对象、继承、多态等,是学好Java的基础。 (4)学习常用的Java库和框架:了解Java的常用库和框架,如集合、I/O流、多线程等,可以帮助你更好地...

    Java高级程序设计实验代码-ServerSQL版-学员信息管理系统JAVAGUI实现.zip

    《Java高级程序设计实验代码-ServerSQL版-学员信息管理系统JAVAGUI实现.zip》是一份包含了学员信息管理系统的Java GUI实现代码的压缩文件。以下是对这个文件的500字描述: 这个压缩文件是一份极具价值的学习资源,...

    基于JAVA的身份证认证系统核心代码与说明

    使用JAVA语言编写的身份证认证系统的核心代码以及说明

    Java核心技术_卷1(原书第8版)_01

    《Java核心技术》出版以来一直畅销不衰,深受读者青睐,每个新版本都尽可能快地跟上Java开发工具箱发展的步伐,而且每一版都重新改写了部分内容,以便适应Java的最新特性。本版也不例外,它反映了JavaSE6的新特性。...

    java多线程tcpsocketserver源码-Java-Book:Java学习资料整理

    java多线程tcp socket server源码 ...--(编写代码过程中的一些最佳实践,注意事项。现在已经出第二版了,增加了lambada的内容) JAVA网络编程 第4版 --(BIO socket编程,现在基本不用了) 性能优化 Java性

    java反编译源码-jd-core:JD-Core是用JAVA编写的JAVA反编译器

    java反编译源码京东核心 JD-Core 是用 JAVA 编写的 JAVA 反编译器。 Java Decompiler 项目主页: 京东核心源代码: JCenter Maven 存储库: 描述 JD-Core 是一个独立的 JAVA 库,包含“Java Decompiler 项目”的 ...

    随机出题系统的java实现,使用java GUI和MySql数据库!

    内容概要:通过程序注释带着读者了解GUI界面构建过程,初步了解 java GUI的使用,理解GUI框架中的核心逻辑,简化代码实现过程,保留核心功能,例如:登陆确认、随机出题、题目文本导入等内容实现。 适合人群:具备...

Global site tag (gtag.js) - Google Analytics