アップデート!
ここで偶然リストを見つけました。
このリンクされたリスト (へー... 'リンクされたリスト') で暗示されているのは、特定の文字セットに制限されているという前提であるため、いくつかのことを見逃していることに注意してください。つまり、改行をエスケープしないために最も危険な文字を 1 つ逃します。改行を格納することは可能ですが、エスケープしないままにしておくと、ユーザーは任意の LDIF を挿入できます。そのため、最も理にかなっていると思われる解決策は次のとおりです。
- base64 は、ASCII 文字セット外の文字を含むか、制御文字を含むすべての値をエンコードします (正規表現を使用して検出するのは非常に簡単です。「ASCII 文字」と「制御文字」を表現する正規表現の省略形がありますが、非制御 ASCII 文字はすべて連続したブロックでは、代わりにその範囲に正規表現を使用することができます; 文芸的なプログラミングはそうすべきではないと言いますが、エラーのマージンも増加します)、:: 構文を使用して、それが何をしているのかを示します。
- base64 でエンコードされていない場合は、以下に示すエスケープ シーケンスを使用します (ただし、明らかな理由から {\0} エスケープは必要ありません)。最後に...
- システムでこれをテストします。base64 エスケープは非常に気密性が高いですが、すべてのフィールドに非制御 ASCII 文字セット全体を入力してユーザーを作成し、それらのユーザーをロードして、すべて問題がないことを確認することをお勧めします。この手順はまだ行っていないので、これが完璧な解決策であるとは思わないでください。さらに、LDIF の解析に使用するソフトウェアが仕様に完全に準拠していないか、これを問題にする追加の問題がある可能性があるため、これが完璧であっても、YMMV.
(以下のコピーパスタは、リンクが AWOL になった場合に備えて、リンクの重要な部分です。)
緩和
LDAP へのユーザー入力を適切に使用するためのエスケープ シーケンスは、ユーザー入力が DN (識別名) の作成に使用されるか、検索フィルターの一部として使用されるかによって異なります。以下のリストは、エスケープする必要がある文字と、それぞれの場合に適したエスケープ方法を示しています。
DN で使用 - \ エスケープが必要
&
!
|
=
<
>
,
+
-
"
'
;
フィルターで使用 - {\ASCII} エスケープが必要
( {\28}
) {\29}
\ {\5c}
* {\2a}
/ {\2f}
NUL {\0}