Как LdapDistinguishedNameEncode работает с библиотекой C # DirectoryServices? - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь санировать пользовательский ввод имени 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);
        }

1 Ответ

0 голосов
/ 20 декабря 2018

Я бы посоветовал вам попробовать перегрузку LdapDistinguishedNameEncode(string, bool, bool).Взято из Выпущено AntiXSS 4.0 :

LdapDistinguishedNameEncode (string, bool, bool) также предоставляется, так что вы можете отключить начальные или конечные правила экранирования символовНапример, если вы объединяете выделенный фрагмент выделенного имени в середину полного выделенного имени.

Надеюсь, это поможет!

...