Я пытаюсь санировать пользовательский ввод имени OU для приложения на C #.
* * * * * * AntiXSS LdapDistinguishedNameEncode
специально создан для этого, но когда я пытаюсь использовать это для имени подразделения, вставьте его в различающееся имя и передайте его в PrincipalContext
или DirectoryEntry
объект Я получаю исключения, что объект не может быть найден.
При использовании необработанного имени подразделения все работает успешно.
Понимают ли библиотеки AD закодированные выделенные имена?Или ожидание того, что LdapDistinguishedNameEncode
предназначен для запуска до создания OU, а также при обращении к нему позже?
Пример кода, где ouName
означает "Боб-Марли" или«Компания Дланода», а тире и апострофы кодируются:
var distinguishedName = $"OU={Encoder.LdapDistinguishedNameEncode(ouName)},DC=sample,DC=net";
try
{
// Create a context for the OU
var context = new PrincipalContext(ContextType.Domain, _targetedUrl, distinguishedName, ContextOptions.Negotiate | ContextOptions.Signing | ContextOptions.Sealing);
}
catch (Exception e)
{
_logger.Error(e, "Organization {0} with definition {1} could not be found, exception occurred {2}", ouName, distinguishedName, e);
}