在LDIF值中需要转义哪些字符?

时间:2013-06-21 14:45:05

标签: escaping ldif

以下是我非常确定需要逃避的字符:

  • \ r
  • \ n
  • \
  • [
  • >
  • <
  • +

我已经通过互联网梳理,并没有找到(综合)清单。

虽然我知道我可以仔细梳理所有相关的RFC,但是我:

  1. 不要相信自己找到一切,
  2. 没有时间,
  3. 我很确定这是有人已经记住的东西。
  4. 编辑:

    哦,这个列表中的where I got some of the values

1 个答案:

答案 0 :(得分:2)

<强>更新<!/强>

偶然找到列表here

值得注意的是,隐藏在这个链表中(嘿......'链表')是假设你只限于某个字符集,所以它错过了一些东西。 也就是说,它错过了单一最危险的角色而不是逃避 - 换行。虽然可以存储换行符,但如果未转义,用户可以注入任意LDIF。因此,似乎最有意义的解决方案是:

  • base64编码包含ASCII字符集之外的字符或包含控制字符的所有值(使用正则表达式很容易检测;有正则表达式表示'ASCII characters''control chars'的简写方法,尽管非控制ASCII字符都在一个连续的块中,你可以只使用一个正则表达式代替那个范围;虽然有文化编程说你不应该,并且它也增加了误差范围),并使用::语法来表明你是什么正在做,然后
  • 如果不是base64编码,请使用下面提供的转义序列(虽然出于显而易见的原因你不需要{\ 0}转义),最后...... ...
  • 在您的系统上测试此内容。 base64转义是非常密集的,但最好是用每个填充了整个非控制ASCII字符集的字段创建用户,然后加载这些用户并检查一切正常。我还没有这一步,所以不要认为这是一个完美的解决方案。此外,您用来解析LDIF的软件可能不完全符合规范,或者可能有其他问题导致这个问题,所以即使这是完美的,YMMV。

(下面的Copypasta是链接中AWOL的重要部分。)

<强>缓解措施

正确使用用户提供的输入到LDAP的转义序列取决于用户输入是用于创建DN(专有名称)还是用作搜索过滤器的一部分。下面的列表显示了需要转义的字符以及每种情况的相应转义方法。

在DN中使用 - 需要\ escape

&
!
|
=
<
>
,
+
-
"
'
;

用于过滤器 - 需要{\ ASCII}转义

(           {\28}
)           {\29}
\           {\5c}
*           {\2a}
/           {\2f}
NUL         {\0}