익명 LDAP 연결 (Anonymous LDAP Binding)
Missing Authentication for Critical Function (LDAP)
Last updated
Missing Authentication for Critical Function (LDAP)
Last updated
import javax.naming.Context;
import javax.naming.InitialDirContext;
import java.util.Hashtable;
public class UnsafeLDAP {
public static void main(String[] args) throws Exception {
Hashtable<String, String> env = new Hashtable<>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://ldap.example.org:389");
env.put(Context.SECURITY_AUTHENTICATION, "none"); // 익명 바인딩 허용 (위험)
InitialDirContext ldapContext = new InitialDirContext(env);
}
}import javax.naming.Context;
import javax.naming.InitialDirContext;
import java.util.Hashtable;
public class SecureLDAP {
public static void main(String[] args) throws Exception {
Hashtable<String, String> env = new Hashtable<>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://ldap.example.org:389");
env.put(Context.SECURITY_AUTHENTICATION, "simple"); // 인증 필수
env.put(Context.SECURITY_PRINCIPAL, "cn=admin,dc=example,dc=org");
env.put(Context.SECURITY_CREDENTIALS, getLdapPassword()); // 보안 저장소에서 비밀번호 로드
InitialDirContext ldapContext = new InitialDirContext(env);
}
private static String getLdapPassword() {
// 비밀번호를 환경 변수 또는 보안 저장소에서 가져옴
return System.getenv("LDAP_PASSWORD");
}
}