4

これまでのところ、エスケープする必要があると確信している文字は次のとおりです。

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

インターネットをくまなく調べましたが、(包括的な) リストは見つかりませんでした。

関連するすべての RFC を注意深く調べることができることは承知していますが、次のことを行います。

  1. 自分がすべてを見つけられると信じないでください。
  2. 時間がない、そして
  3. これは、誰かがすでに覚えているものだと確信しています。

編集:

ああ、これがそのリストの値の一部を取得した場所です。

4

1 に答える 1

3

アップデート!

ここで偶然リストを見つけました。

このリンクされたリスト (へー... 'リンクされたリスト') で暗示されているのは、特定の文字セットに制限されているという前提であるため、いくつかのことを見逃していることに注意してください。つまり、改行をエスケープしないために最も危険な文字を 1 つ逃します。改行を格納することは可能ですが、エスケープしないままにしておくと、ユーザーは任意の LDIF を挿入できます。そのため、最も理にかなっていると思われる解決策は次のとおりです。

  • base64 は、ASCII 文字セット外の文字を含むか、制御文字を含むすべての値をエンコードします (正規表現を使用して検出するのは非常に簡単です。「ASCII 文字」「制御文字」を表現する正規表現の省略形がありますが、非制御 ASCII 文字はすべて連続したブロックでは、代わりにその範囲に正規表現を使用することができます; 文芸的なプログラミングはそうすべきではないと言いますが、エラーのマージンも増加します)、:: 構文を使用して、それが何をしているのかを示します。
  • base64 でエンコードされていない場合は、以下に示すエスケープ シーケンスを使用します (ただし、明らかな理由から {\0} エスケープは必要ありません)。最後に...
  • システムでこれをテストします。base64 エスケープは非常に気密性が高いですが、すべてのフィールドに非制御 ASCII 文字セット全体を入力してユーザーを作成し、それらのユーザーをロードして、すべて問題がないことを確認することをお勧めします。この手順はまだ行っていないので、これが完璧な解決策であるとは思わないでください。さらに、LDIF の解析に使用するソフトウェアが仕様に完全に準拠していないか、これを問題にする追加の問題がある可能性があるため、これが完璧であっても、YMMV.

(以下のコピーパスタは、リンクが AWOL になった場合に備えて、リンクの重要な部分です。)

緩和

LDAP へのユーザー入力を適切に使用するためのエスケープ シーケンスは、ユーザー入力が DN (識別名) の作成に使用されるか、検索フィルターの一部として使用されるかによって異なります。以下のリストは、エスケープする必要がある文字と、それぞれの場合に適したエスケープ方法を示しています。

DN で使用 - \ エスケープが必要

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

フィルターで使用 - {\ASCII} エスケープが必要

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