В настоящее время я разрабатываю пользовательский интерфейс для управления пользователями и прочим.В качестве хранилища данных я должен использовать ldap.Я использую библиотеку novell.directory.ldap
для вещей, связанных с ldap.
Теперь мне интересно, выполняет ли эта библиотека кодирование параметров, которые она получает, например, при выполнении поиска илиесли мне придется кодировать потенциальный пользовательский ввод, например имена пользователей, которые позже будут использоваться в поисковых запросах, сам.
Я уже пытался выполнить кодирование с помощью AntiXSSLibrary (я используюпакет nuget sicne, кодировка ldap не была включена в саму .net Framework, как и другие части библиотеки) и его Encoder.LdapFilterEncode()
и Encoder.LdapDistinguishedNameEncode()
методы.
Это мой код при попытке кодировать:
public static LdapSearchResults PerformSearch(LdapConnection connection, string filter, string basedn)
{
string encodedFilter = Encoder.LdapFilterEncode(filter);
string encodedBasedn = Encoder.LdapDistinguishedNameEncode(basedn);
LdapSearchConstraints searchConstraints = new LdapSearchConstraints { BatchSize = 0 };
return connection.Search(encodedBasedn, LdapConnection.SCOPE_SUB, encodedFilter, null, false, searchConstraints);
}
- Если я передам параметры напрямую (= не закодировано), все будет работать как положено.
- Если я передам закодированный фильтр, я получу
LdapLocalException
с сообщением «Ошибка фильтра» в методе Search()
экземпляра LdapConnection
. - Если я пропущу некодированный фильтри передать закодированный базис, я получу
LdapException
с сообщением «Неверный синтаксис DN» при попытке получить доступ к результатам поиска. - Если я пропущу некодированный фильтр и передам экодированный базис, в этом случае закодированный с помощьюметод
Encoder.LdapFilterEncode()
, все будет работать нормально.
Итак, главный вопрос: нужно ли мне беспокоиться о внедрении ldap или библиотека уже позаботилась об этой угрозе?К сожалению, я не смог найти ответ на этот вопрос в документации и поиске в Интернете.
Если мне нужно кодировать (что я ожидаю, я должен сделать в данный момент), что является самым простым и безопаснымспособ кодирования входов для ldap в C # /. Net, когда AntiXSSLibrary не работает для меня?