【问题标题】:How to escape the special character in an ldap query?如何转义 ldap 查询中的特殊字符?
【发布时间】:2019-08-30 07:02:28
【问题描述】:

我在 LDAP 上有一个用基本 DN 命名的用户

=CN=abc def\, ghi,CN=jkl,DC=mno,DC=pqr

密码是xyz

我想在 ldap 中搜索这个用户,我该怎么做?有一点很清楚,LDAP 查询应该是这样的,

CN=abc def\\\, ghi\,CN=jkl\,DC=mno\,DC=pqr,xyz

尝试了这些解决方案

.getBindUserDN().replaceAll("[,]", "\\\\\\,").getBindUserDN().replaceAll(",", "\\,")

等等。这里的逻辑应该是什么?

【问题讨论】:

  • 需要转义的内容取决于您使用它的上下文。您如何使用此值?
  • 我正在指定此值并在 MS-AD 中搜索 CN=abc def\。但它总是说找不到用户。
  • 你是如何“指定这个值并搜索”的?你能显示那个代码吗?
  • 对不起,代码不允许显示,但我发现了问题。

标签: java active-directory ldap


【解决方案1】:

我找到了解决方案,但它非常适用于这种情况,我们只指定一个反斜杠\ 和一个逗号,,即\,

问题是,当我尝试搜索 ldap 条目时,我直接获取了 Bind DN 的值。后来经过反复试验,我了解到,当我搜索它的密钥时,我们需要 6 个反斜杠,即\\\\\\ 才能找到它的密钥,因为 LDAP 使用 3 个反斜杠和逗号 \\\, 存储它。

但是当我要在 Ldap 中查找这个密钥时,现在我需要使用这个新的密钥进行搜索,这意味着应该有 6 个反斜杠。所以我必须用双倍这些反斜杠的数量来搜索它,即 12 \\\\\\\\\\\\

PS:- This Solution appltes to a very particular case. But Logic should be similar if someone needs to apply it in a different way

【讨论】:

  • 我从未见过任何需要超过 2 个反斜杠的情况(一个用于转义 DN 中的逗号,另一个用于转义代码中的逗号)。我不知道你在做什么,但几乎可以肯定有更好的方法来做到这一点。
  • 看,如果您在 MS-AD 中创建一个用户为 Abc\, xyz,那么 MS-AD 将其存储为 Abc\\\, xyz 所以当我必须在 LDAP 目录中查找它的密钥时,我必须使用 Abc\\\, xyz 的 keyAlias 对其进行搜索。
  • 我知道 CN 是否有 , 它将其存储为 \, 在 DN 中。但是你是说你在 CN 里真的有\, 吗?为什么?
  • 因为 MS-AD 不允许使用单个逗号,因为它是保留字符。为了逃避逗号微软建议使用\,
  • 我们在 CN 中一直使用一个逗号(我的意思是cn 属性),AD 会自动将\, 放在 DN 中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-23
  • 1970-01-01
  • 2011-09-25
  • 1970-01-01
  • 2016-01-14
相关资源
最近更新 更多