一位名为 Sam Bocetta 的作者发表了一篇文章,针对在 2020 年使用 Java 进行编码时应遵循的五个原则进行了研究。他在文中表示,尽管目前 Java 的安全性相较于一些旧的语言(特别是 C 和 C ++)而言有所长进,但是使用 Java 编写的代码的漏洞级别还是取决于程序员遵循的最佳实践。
在当今的开发环境中更是如此,各种新的安全性技术、黑客技术以及新颖的存储和加密形式,意味着许多人都在质疑着 Java 的安全性。Java 开发人员还面临着包括云迁移的安全性问题在内的诸多挑战。另一方面,新的安全审核技术(如混沌工程)也为开发人员提供了许多提高代码安全性的机会。
五个原则的具体内容如下:
1. Audit your libraries
首先从基于 Java 的软件最明显的漏洞源开始:外部库。
使用外部库本身不是问题。在 2020 年,大多数开发人员的大部分时间确实都花在了与第三方库的合作上。未来随着客户需求的发展,库的类型也会也来越多。因此,重要的是在每次添加新的库的时候,开发人员都要去仔细检查其中的已知漏洞,不能掉以轻心。
审计您的库不仅对安全性有好处。在审核的同时,您可能还会发现其他对性能产生不利影响的问题。并且,如果您要审核的库是开源的,则可以借此机会报告错误并在整个开源社区中建立团队的声誉。
2. Manage Application Secrets
在管理应用程序的 secrets 时,Java 开发人员也养成了一些坏习惯。基本上,社区可以分为两个阵营:那些牺牲安全性以便为用户提供尽可能流畅的软件体验的人,以及那些希望用户花费 4 个小时为自己的利益输入凭据的人。
实际上,2020 年的编码意味着要在安全性和可用性之间取得平衡。对可用性的过多关注通常会导致代码不安全,对安全性的过多关注则意味着用户将会花费大部分时间来尝试规避你采取的安全措施,且他们最终也会成功找到方法。
而在管理应用程序的 secrets 时,Java 开发人员可以从了解 CMS 平台之间的差异中学到很多东西。因为大多数的 CMS 平台都具有庞大的用户基础,这意味着其开发人员必须仔细考虑如何管理应用程序的 secrets ,同时还要保持普通用户的可用性。
3. Use Mature Encryption Libraries
用于加密的库应该比其他类型的库进行审计和分析的频率更高。过去,用于加密的 Java 库极难使用,其 API 对普通开发人员的帮助不足。这也就导致了许多 Java 开发人员开始自己编写加密库。
在此过程中,一些人开始错误地对自己的加密技术产生浓重的自豪感,并对他人编写的代码产生怀疑。而此举并不可取,毕竟一些开发人员一生都在致力于制作不可破解的加密库,他们编写的加密库性能势必要强于大部分人。
用 Java 进行加密的最好方法则是使用该语言提供的内置工具,重新发明轮子没有任何意义(也存在重大弊端)。
4. Validate Your Inputs
如上所述,2020 年的编程很大一部分是确保您的用户不会破坏您精心设计的软件。最简单的方法之一是花费一些时间来验证用户输入。此举不仅能使您的应用程序更安全,也会使得它们更易于使用。
5. Don’t Reinvent the Wheel
最后,一种万能的原则适用于所有语言的所有开发人员:不要自己制作易于使用的版本。
自己制作库的问题在于,晦涩的代码本质上并没有比公开可用的代码更安全。主要原因是开源库在被众人使用的同时,也在被成千上万人检查。因此,其中所存在的漏洞也会很快被发现。
总结
100% 的安全是不可能的。确保 Java 开发中的安全性的关键是,拥有一个用于检查安全漏洞并将其关闭的系统。最重要的是,Java 开发人员应该意识到,确保代码安全是一个过程,而不是一个事件。并且,所有地这些问题都需要通过在程序的整个生命周期中进行仔细的审核来解决。