4

以下是到目前为止我很确定需要转义的字符:

  • \r
  • \n
  • \
  • ,
  • ;
  • "
  • '
  • [
  • ]
  • >
  • <
  • +

我已经在互联网上进行了梳理,但没有找到(全面的)列表。

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

  1. 不要相信自己能找到一切,
  2. 没时间,而且
  3. 我很确定这是外面有人已经记住的东西。

编辑:

哦,这就是我在该列表中获得一些值的地方。

4

1 回答 1

3

更新!

在这里无意中找到了这份清单。

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

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

(下面的复制粘贴是链接中的重要部分,以防链接丢失。)

减轻

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

用于 DN - 需要 \ 转义

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

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

(           {\28}
)           {\29}
\           {\5c}
*           {\2a}
/           {\2f}
NUL         {\0}
于 2013-07-19T14:08:04.463 回答