Java SE安全编码准则

Java SE安全编码准则 

针对Java SE 13更新的
文档版本:7.3
发布:2018年9月27日
最近更新:2019年9月23日

 

介绍

Java平台的主要设计考虑因素之一是为执行具有不同权限级别的代码提供受限制的环境。Java带有其自身独特的一组安全挑战。尽管Java安全体系结构[1] 在许多情况下可以帮助保护用户和系统免受恶意代码或行为不当的攻击,但它无法防御可信任的情况下发生的实现错误。码。这些错误可能会无意中打开安全体系结构设计要包含的漏洞。在严重的情况下,可能会执行本地程序或禁用Java安全性。这些错误可能会被用来从计算机和Intranet窃取机密数据,滥用系统资源,阻止计算机的有用操作,协助进一步的攻击以及许多其他恶意活动。

语言系统的选择会影响任何软件程序的健壮性。Java语言[2]和虚拟机[3] 提供了许多功能来减轻常见的编程错误。该语言是类型安全的,运行时提供了自动内存管理和数组边界检查。Java程序和库会尽早检查非法状态。这些功能还使Java程序具有很高的抵抗堆栈 破坏[4]的能力,并且可以在C语言和较小程度上的C ++编程语言中实现缓冲区溢出攻击。Java的显式静态类型使代码易于理解(并促进了静态分析),并且动态检查可确保意外情况导致可预测的行为。

为了最大程度地减少由程序员错误引起的安全漏洞的可能性,Java开发人员应遵守推荐的编码准则。现有的出版物,例如有效的Java [6],提供了与Java软件设计相关的出色指南。其他,例如软件安全性: [7]中的安全性构建,概述了软件安全性的指导原则。本文档将这些出版物联系在一起,并涵盖了其他主题。它针对Java编程语言提供了一套更完整的特定于安全性的编码准则。这些准则对于所有Java开发人员都是有意义的,无论他们创建受信任的最终用户应用程序,实现安全组件的内部还是开发执行常规编程任务的共享Java类库。任何实施错误都可能导致严重的安全后果,并可能出现在软件堆栈的任何层中。

尽管第0至3节通常适用于不同类型的软件,但第4至9节中的大多数准则都侧重于与不受信任的代码进行交互的应用程序(尽管这些节中的某些准则仍与其他情况有关)。开发人员应分析跨应用程序信任边界发生的交互,并确定涉及的数据类型,以确定哪些准则相关。执行威胁建模和建立信任边界可以帮助完成此任务(请参阅准则0-4)。

这些准则旨在帮助开发人员构建安全软件,但它们并不特别关注于实现安全功能的软件。因此,本文档未涵盖诸如密码学之类的主题( 有关在Java上使用密码学的信息,请参见[9][10])。虽然向软件添加功能可以解决一些与安全性相关的问题,但不应依赖于消除安全性缺陷。

本文档已更新,以涵盖Java SE 11中包含的一些新功能。但是,这些准则也适用于为Java早期版本编写的软件。

......

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章