c# - LdapDistinguishedNameEncode 如何与 C# DirectoryServices 库一起使用?
问题描述
我正在尝试清理 C# 应用程序的 OU 名称的用户输入。
AntiXSSLdapDistinguishedNameEncode
似乎是为此定制的,但是当我尝试在 OU 的名称上使用它时,将其插入到可分辨名称中,然后将其传递到一个PrincipalContext
或DirectoryEntry
对象中,我得到无法找到该对象的异常。
使用未经清理的 OU 名称时,一切都会成功。
AD 库是否理解编码的专有名称?还是预期在创建 OU之前以及稍后引用它时LdapDistinguishedNameEncode
运行?
示例代码,ouName
“Bob-Marley”或“dlanod's company”在哪里,破折号和撇号被编码:
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);
}
解决方案
我建议你试试LdapDistinguishedNameEncode(string, bool, bool)
超载。取自AntiXSS 4.0 Released:
还提供了LdapDistinguishedNameEncode(string, bool, bool),因此您可以关闭初始或最终字符转义规则,例如,如果您将转义的专有名称片段连接到完整专有名称的中间。
希望能帮助到你!
推荐阅读
- git - git结帐
不适用于特定分支 - sql - 在 SQL Server 中使用 over()
- c# - 模拟器构建已被取消
- bash - 使用 SED 匹配特定字母并在此之后打印单词
- sql - 使用发票行项目汇总订单总数
- reactjs - auth0 注销后不需要密码;无需密码重新登录
- laravel - Laravel 表单提交发送到错误的路线?
- ios - 为什么 AVCaptureVideoDataOutput 不给我支持的最高分辨率帧?
- python - 如何在 html 中调整表单(relaive auth 表单)
- javascript - 使用 Jquery 不完全正确的两个变化变量的总和