Какие символы необходимо экранировать в значениях LDIF?
Вот персонажи, от которых я уверен, что до сих пор нужно убегать:
- \р
- \ п
- \
- ,
- ;
- "
- '
- [
- ]
- >
- <
- +
Я прочесал интернет и не нашел (всеобъемлющего) списка.
Хотя я знаю, что могу тщательно прочесать все соответствующие RFC, я:
- Не верь себе, что найду все,
- Не хватает времени и
- Я уверен, что это то, что кто-то там уже запомнил.
РЕДАКТИРОВАТЬ:
О, и вот где я получил некоторые значения в этом списке.
1 ответ
ОБНОВИТЬ!
Нашел список по счастливой случайности здесь.
Стоит отметить, что в этом связанном списке (хе... "связанный список") подразумевается, что вы ограничены определенным набором символов, поэтому он пропускает несколько вещей. А именно, он пропускает самый опасный символ, чтобы не убежать от перевода строки. В то время как можно сохранять переводы строки, если оставить ее без экранирования, пользователь может ввести произвольный LDIF. Таким образом, решение, которое кажется наиболее целесообразным, заключается в следующем:
- base64 кодирует все значения, содержащие символы вне набора символов ASCII или содержащие контрольные символы (довольно легко обнаружить с помощью регулярных выражений; существуют сокращенные способы регулярного выражения для выражения 'ASCII-символов' и 'контрольных символов', хотя, поскольку все неконтролирующие символы ASCII являются в непрерывном блоке вы можете просто использовать вместо этого регулярное выражение для этого диапазона, хотя грамотное программирование говорит, что вы не должны, и это также увеличивает предел погрешности), и используйте синтаксис::, чтобы показать, что вы делаете, тогда
- если не закодирован base64, используйте escape-последовательности, представленные ниже (хотя по понятным причинам вам не понадобится escape {\0}), и наконец...
- проверить это в вашей системе. Экранирование base64 довольно герметично, но было бы неплохо создать пользователей с каждым полем, заполненным всем неконтролируемым набором символов ASCII, затем загрузить этих пользователей и проверить, что все в порядке. Я еще не сделал этот шаг, поэтому не думайте, что это идеальное решение. Кроме того, программное обеспечение, которое вы используете для анализа LDIF, может не полностью соответствовать спецификации, или может иметь дополнительные проблемы, которые делают это проблематичным, поэтому, даже если это идеально, YMMV.
(Copypasta'd ниже является важной частью ссылки в случае, если ссылка идет в самоволку.)
смягчение
Экранирующая последовательность для правильного использования предоставленного пользователем ввода в LDAP отличается в зависимости от того, используется ли пользовательский ввод для создания DN (отличительного имени) или как часть поискового фильтра. В листингах ниже показан символ, который должен быть экранирован, и соответствующий метод экранирования для каждого случая.
Используется в DN - Требует \ побег
&
!
|
=
<
>
,
+
-
"
'
;
Используется в фильтре - требуется {\ASCII} escape
( {\28}
) {\29}
\ {\5c}
* {\2a}
/ {\2f}
NUL {\0}