大家好,前段时间由一条 Log4j 官网发布的漏洞信息引起了业内的轩然大波,想必当时很多程序员和我一样 —— 连夜加班升级系统。
事情过去以后,我开始认真研究 Log4j 远程代码注入漏洞产生的原因,其中就遇到了 JNDI 和 LDAP 的概念,花了一会功夫总结一下:
1、JNDI
简单来说,JNDI (Java Naming and Directory Interface) ,是SUN公司提供的一种标准的Java命名系统接口,它为开发人员查找和访问各种资源提供了统一的通用接口,可以用来定位用户、网络、机器、对象和服务等各种资源。NDI提供统一的客户端API,通过不同的服务供应接口(SPI)的实现,由管理者将JNDI API映射为特定的命名服务和目录系统,使得Java应用程序可以和这些命名服务和目录服务之间进行交互。
JNDI底层支持RMI远程对象,RMI注册的服务可以通过JNDI接口来访问和调用。
JNDI支持多种命名和目录提供程序(Naming and Directory Providers),RMI注册表服务提供程序(RMI Registry Service Provider)允许通过JNDI应用接口对RMI中注册的远程对象进行访问操作。将RMI服务绑定到JNDI的一个好处是更加透明、统一和松散耦合,RMI客户端直接通过URL来定位一个远程对象,而且该RMI服务可以和包含人员,组织和网络资源等信息的企业目录链接在一起。
上面提到了命名服务与目录服务,他们又是什么呢?