当前位置: 首页 > 面试题库 >

Java,LDAP:使其不忽略空白密码吗?

闾丘鸣
2023-03-14
问题内容

我正在维护一些旧版Java LDAP代码。我几乎不了解LDAP。

下面的程序基本上只是将用户ID和密码发送到LDAP服务器,如果凭据良好,则接收回通知。如果是这样,它将打印出从LDAP服务器接收到的LDAP属性,如果不是,它将打印出异常。

如果输入了错误的密码,则一切正常。抛出“无效凭据”异常。但是,如果将空白密码发送到LDAP服务器,则仍然会进行身份验证,并且仍会返回LDAP属性。

是由于LDAP服务器允许使用空白密码而导致这种不愉快的情况,还是需要调整以下代码,以便将空白密码以这种方式馈送到LDAP服务器以使其被拒绝?

我确实有数据验证。我在测试环境中采用它来解决另一个问题,并注意到了这个问题。我希望在数据验证下不要出现此问题。

在此先感谢您提供任何信息

import javax.naming.*;
import javax.naming.directory.*;
import java.util.*;
import java.sql.*;

public class LDAPTEST {

    public static void main(String args[]) {

        String lcf                = "com.sun.jndi.ldap.LdapCtxFactory";
        String ldapurl            = "ldaps://ldap-cit.smew.acme.com:636/o=acme.com";
        String loginid            = "George.Jetson";
        String password           = "";
        DirContext ctx            = null;
        Hashtable env             = new Hashtable();
        Attributes attr           = null;
        Attributes resultsAttrs   = null;
        SearchResult result       = null;
        NamingEnumeration results = null;
        int iResults              = 0;
        int iAttributes           = 0;


        env.put(Context.INITIAL_CONTEXT_FACTORY, lcf);
        env.put(Context.PROVIDER_URL, ldapurl);
        env.put(Context.SECURITY_PROTOCOL, "ssl");
        env.put(Context.SECURITY_AUTHENTICATION, "simple");
        env.put(Context.SECURITY_PRINCIPAL, "uid=" + loginid + ",ou=People,o=acme.com");
        env.put(Context.SECURITY_CREDENTIALS, password);
        try {

            ctx     = new InitialDirContext(env);
            attr    = new BasicAttributes(true);
            attr.put(new BasicAttribute("uid",loginid));
            results = ctx.search("ou=People",attr);

            while (results.hasMore()) {
                result       = (SearchResult)results.next();
                resultsAttrs = result.getAttributes();

                for (NamingEnumeration enumAttributes  = resultsAttrs.getAll(); enumAttributes.hasMore();) {
                    Attribute a = (Attribute)enumAttributes.next();
                    System.out.println("attribute: " + a.getID() + " : " + a.get().toString());
                    iAttributes++;


                }// end for loop

                iResults++;
            }// end while loop

            System.out.println("Records  == " + iResults + " Attributes: " + iAttributes);

        }// end try
        catch (Exception e) {
            e.printStackTrace();
        }



    }// end function main()
}// end class LDAPTEST

问题答案:

不幸的是,使用DN和空密码进行身份验证是LDAP的一大难题,并导致服务器发出“未经身份验证”的肯定响应。某些LDAP服务器具有配置选项以禁用该行为,该行为在LDAPv3的最新版本(RFC
4511)中不建议使用,甚至默认情况下也被禁用。

最终,客户端应用程序应检查输入参数,并确保密码不为空。

亲切的问候,

鲁多维奇



 类似资料:
  • 读取文件已支持 windows 系统,版本号大于等于 1.3.4.1; 扩展版本大于等于 1.2.7; PECL 安装时将会提示是否开启读取功能,请键入 yes; 测试数据准备 $config = ['path' => './tests']; $excel = new \Vtiful\Kernel\Excel($config); ​ // 写入测试数据 $filePath = $excel->f

  • 问题内容: HTML / CSS中是否有任何内容可以告诉浏览器完全忽略空格? 如此多次,当您想要将两个图像彼此并排放置时-拼命尝试使HTML可读,但是浏览器在它们之间放置了一个空格。 因此,而不是像这样: 你最终得到这个 真是太恐怖了! 问题答案: 哦,您只需一行CSS就可以轻松实现: 劣势,你问?尚无 浏览器实现此 极其有用的功能(通常考虑内联块)。 我有时会做些什么,尽管黑夜很丑,但还是要使用

  • 读取文件已支持 windows 系统,版本号大于等于 1.3.4.1; 扩展版本大于等于 1.2.7; PECL 安装时将会提示是否开启读取功能,请键入 yes; 测试数据准备 $config = ['path' => './tests']; $excel = new \Vtiful\Kernel\Excel($config); ​ // 写入测试数据 $filePath = $excel->f

  • 问题内容: 我正在使用python csv阅读器。我如何以忽略空白行的方式使用以下代码。 问题答案: 如果您的csv文件以空行开头,我认为您应该能够在创建csv阅读器之前跳过该行:

  • 我想做一个简单的应用程序加密/解密与AES的消息。我的代码似乎现在工作,因为我得到的文本加密和解密没有任何问题。 我有一个输入字段、一个输入密码用于解密/加密的字段和一个输出字段。和两个按钮(加密/解密)。 问题是****,当我输入一条消息,设置密码并对其进行加密,然后试图引发无效的密码获取时,尽管输入的密码与我用于加密的密码不匹配,但消息还是会解密。 下面是我的密钥生成代码: 这里是我加密消息的

  • 这是我的东西 当我得到响应时,我看到 我的看起来像 问题 如何消除中的值?