与添加新功能一样重要的是,应用程序开发人员需要开始更加重视他们设计的应用程序的安全性。毕竟,更多的应用程序功能意味着更多的数据驻留在应用程序中。如果没有适当的安全控制,这些数据很容易被入侵者窃取。
Java是目前世界上最安全、最流行的编程语言之一。自20世纪90年代中期以来,尤其是在设法消除了C和C++语言的许多安全隐患和漏洞之后,它一直获得了良好的声誉。然而,成为最安全的编码语言并不能使Java编码免受可能的网络安全威胁。开发人员仍然必须提供安全的代码,并确保他们的应用程序是万无一失的,即使他们是用Java特性开发的。这10个技巧将随时派上用场,以确保Java特性的应用程序安全性:
1.在Pi平台上使用Java ME
如果你使用复盆子Pi 4作为设计Java应用程序的平台,那么在Pi上安装Java ME将允许你轻松地嵌入、测试和调整应用程序的安全功能,即使是对于内存空间或磁盘占用较小的设备也是如此。JavaME是用基于CLDC的运行时构建的,允许它在高度内存受限的设备(低至1MB)上运行。如果你的设备的内存容量为10MB或更大,则需要具有基于CDC的运行时的Java ME。只需确保你用于开发应用程序的Java ME版本是专门为树莓派构建的。
2.避免复杂和混乱的编码
序列化是有用的,因为它允许Java程序员将远程输入/对象转换成可传输的字节流,然后可以作为完全赋予的对象保存到磁盘上。这个过程可以反过来(通过Java反序列化)从保存的字节流中重新创建原始对象。
然而,Java反序列化很容易受到攻击,因为在解码之前,不可能从保存的字节流中判断出原始对象是什么。这意味着如果攻击者向你的应用程序发送一个序列化的恶意对象,你必须首先解码它,此时你已经实例化了它。未知数据将已经在JVM中运行代码。
如果能够消除类路径上的漏洞,这些攻击是可以避免的。问题是,Java库和第三方库中有大量的类,加上你自己代码中的类,几乎不可能保证你的类路径中没有易受攻击的类。
有大量的开源库,它们由大量专门用于Java开发的类定义(预先编写的代码)组成。它们包括日志库(例如Log4j、SLF4j、LogBack)、解析库(例如JSON)和通用库(例如Google Guava和Apache Commons库)等等。
但是并不是所有的图书馆都是安全的。要确保库的可靠性,请考虑:
l 它的文档。如果没有很好地记录,它可能是不安全的。
l 它背后是否有一个活跃的支持社区;也许是一个开发者论坛,你可以在那里获得帮助?
l 应用编程接口(API)文档怎么样?
l 该库正在开发中吗?如果是,它有多稳定/精简?
4.使用查询参数化
注入是当今最大的应用程序漏洞之一。入侵者使用Java中典型的sql注入将SQL查询链接在一起,导致SQL的不安全执行。你可以使用查询参数化来防止它。这些参数阻止入侵者访问查询的静态部分,因此他们无法获得关键的应用程序信息。
为了防止Java中的注入,程序员准备了一个最终用户必须用来访问应用程序数据库的语句。如果用户没有通过这个预先存在的语句创建他们的查询,那么应用程序将知道执行SQL是不安全的。简单来说,查询参数化就是定义一个app的完整SQL代码和安全查询的参数。它将SQL代码与参数数据分开,这样查询就不会被劫持。
5.使用高级身份验证
身份验证机制可以提高或降低应用程序的安全性。如果身份验证较弱,你的应用程序将容易受到攻击,反之亦然。作为开发人员和用户,你需要使用强密码来保护应用程序数据。但由于一些用户可能会不顾及自己的密码,作为应用程序开发人员,你有责任制定一个密码策略,迫使用户对自己的密码保持警惕。
另一种确保用户的鲁莽不会危及应用程序可信度的方法是尽量减少应用程序中敏感数据的存储。你甚至可以让用户无法在你的服务器上保存他们的机密数据。
专业提示:高级认证也意味着最小化对日志的依赖。确保用户无需一直登录即可访问你的内容,即使他们登录了,他们的登录凭据也会被自动删除。
6.安装篡改检测功能
有多个Java特性可以帮助你尽早检测和阻止任何篡改企图。如果有人试图修改或更改你的代码,这种篡改检测功能会提醒你。请注意,恶意的程序员总是试图将糟糕的代码注入到你的应用程序中,这样他们就可以破坏你的应用程序或者窃取数据。
7.配置你的XML解析器
这将有助于你阻止应用程序的外部实体(XXE)。有时,入侵者会创建恶意的XML,并使用它们来读取应用程序中选定文件的内容。请注意,XXE攻击是Java编程中的顶级漏洞之一。入侵者只需要自己的Java SAX解析器和XML解析器的简单实现,就可以轻松解析XML文件。
8.使用VPN保护数据
一个著名的VPN服务将使你的应用程序数据密码保护。入侵者将无法窃取、复制或共享你的数据。
9.利用Java安全管理器
Java安全管理器允许你配置自己的安全策略。你可以使用它来创建:
l 黑名单:此列表包含你的应用程序不允许的操作。不在此列表中的所有内容都是允许的。因此,你需要了解你的应用程序的所有潜在安全威胁,并将它们列入黑名单。
l 白名单:这个名单只包含应用程序允许的操作。默认情况下,不在此列表中的所有操作都是不允许的。
创建你自己的策略文件并有权限制必要的权限,这使你可以轻松地运行应用程序。Java安全管理器基本上让你负责应用程序的安全性和漏洞。
10.全面的质量评估会有所帮助
在启动你的应用程序之前,先测试它是否存在安全漏洞。还不如自己去发现安全漏洞。请注意,你的应用程序的成功取决于最终用户的满意度,除非用户的数据是安全的,否则用户不会满意。
结论
Java平台带有大量经过测试和验证的内置安全特性。这种语言也经常针对新的安全漏洞进行更新;它包括各种用于检测和报告安全问题的工具。也就是说,在Java上开发你的应用,会省去你很多应用安全的麻烦。
记住这一点,今天的现实是,即使你在编码过程中遵循了所有的应用程序安全提示,也不可能胜过世界上所有的黑客。不管你认为它们有多安全,总有人会找到绕过你的代码的方法。这就是为什么不断改进你的应用程序的安全特性和重新想象可能的漏洞是很重要的。投资安全管理解决方案也很重要,这样你就可以捕捉漏洞并实时解决它们。
发表评论 取消回复