七个常见的Java应用程序安全陷阱以及如何处理它们组件,保护所有组件当然是困难的。事实上,23%的.NET应用程序极易受到攻击,而44%的Java应用程序极易受到攻击。Java应用程序安全性存在许多挑战。但是,本文列出了七种常见的典型安全陷阱。如果企业安全团队意识到Java应用程序可能存在漏洞,请尝试先从这些方面入手。发现和消除问题会更容易、更快捷。XXE攻击当网络攻击者使用可扩展标记语言(XML)解析器读取服务器上的任意文件时,就会发生这种攻击。然后,他们可以部署XML外部实体(XXE)来检索用户信息、配置文件甚至云环境的凭据。大多数JavaXML解析器默认开启XXE需求,因此企业安全人员应主动关闭XXE以避免XXE攻击。不安全的反序列化在序列化过程中,编程语言中的对象被转换为可以保存到数据库或通过网络传输的格式。相反的情况发生在反序列化过程中,从文件或网络中读取序列化的对象,因此它可以变回对象。然而,黑客会寻找不安全的反序列化漏洞,以便他们可以操纵序列化对象来发起攻击,例如身份验证绕过、拒绝服务或任意代码执行。为了防止这种情况,安全人员需要应用最新的补丁并确保第三方代码符合防御标准,因为许多不安全的反序列化漏洞是通过依赖关系引入的。远程代码执行黑客经常在受害者的机器上执行远程代码(RCE),通常是通过命令注入漏洞:用户输入直接与系统命令相关联。由于应用程序无法区分用户输入和系统命令,它将用户输入作为代码执行,这使得黑客可以在机器上执行任意命令。最有效的对策是拥有一个有效的白名单,这将确保强大的输入验证机制。SQL注入从广义上讲,当应用程序无法正确区分不受信任的用户数据和合法/有效代码时,就会发生注入。在操作系统命令中,这会导致命令注入。以结构化查询语言(SQL)注入为例,攻击者通过注入数据来操纵SQL命令。如果应用程序无法正确验证用户输入,攻击者可以插入为SQL语言指定的字符来破坏查询逻辑并执行任意SQL代码。他们可以利用受感染的查询结构来篡改或窃取数据和/或在操作系统中执行任意命令。可以为此目的预编译SQL语句,以便严格提供插入到语句中以供执行的参数(或变量/输入)。NoSQL注入NoSQL数据库不使用SQL语言。在NoSQL注入期间,黑客将数据注入数据库语言逻辑以启用身份验证绕过和RCE。MongoDB、Couchbase、Cassandra、HBase和其他NoSQL数据库容易受到此类攻击。NoSQL查询语法是特定于数据库的,查询通常是用应用程序的编程语言编写的。因此,必须采取特定于数据库的方法来防止NoSQL注入。LDAP注入轻量级目录访问协议(LDAP)使开发人员能够查询有关系统用户和设备的目录服务。但是,当应用程序允许在这些查询中进行不受信任的输入时,黑客可以提交精心设计的输入来绕过身份验证并篡改存储在目录中的数据。设置参数化查询也会在这里起到有效的预防作用。日志注入安全团队依靠系统日志来检测网络中的恶意活动。攻击者也意识到这一点,并在攻击期间篡改日志文件以掩盖他们的踪迹。通过典型的日志注入,他们可以诱骗应用程序在日志文件中写入虚假条目。例如,攻击者可能会寻找不清理写入日志输入的换行符的应用程序,引入自己的换行符,并插入新的应用程序日志条目。或者在日志条目中注入恶意HTML,对管理日志的管理员的浏览器发起跨站脚本(XSS)攻击。为了避免这种情况,企业安全人员需要在每个日志条目中添加时间戳、进程ID、主机名和其他形式的元数据,以区分真实日志条目和虚假日志条目。采用零信任原则时,应将日志文件内容视为不受信任的输入,除非输入经过充分验证,否则不应允许访问和操作。参考链接:https://sdtimes.com/java/how-to-avoid-the-top-7-java-security-pitfalls/
