【问题标题】:What characters need to be escaped in LDIF values?LDIF 值中需要转义哪些字符?
【发布时间】:2013-06-21 14:45:05
【问题描述】:

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

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

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

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

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

编辑:

哦,还有where I got some of the values 在该列表中。

【问题讨论】:

  • LDIF 生成将在 Scala 中完成,如果这是相关的(即如果已经有 Java 或 Scala 中的库)。
  • 只要确保您对 CLI 具有特殊含义的字符进行转义即可。
  • ...LDIF 是一种文件格式。一个我不是很熟悉的。工具链的任何部分都不涉及命令行/repl 界面。如果我听从你的建议,我将一无所获。这会很糟糕,因为我知道有些东西需要转义(因为文件已格式化,并且可以有相邻的逗号分隔值)。

标签: escaping ldif


【解决方案1】:

更新!

偶然发现名单here

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

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

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

缓解

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

在 DN 中使用 - 需要 \escape

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

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

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

【讨论】:

    猜你喜欢
    • 2014-05-14
    • 2013-03-24
    • 2010-11-08
    • 1970-01-01
    • 2018-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多