我有一个LDAP查询,我用它来在C#中执行搜索.它使用两个字符串变量(用户名和域),出于安全原因需要对其进行转义.
我应该如何摆脱弦乐?C#.NET中是否有可用的功能来执行此操作?
示例LDAP搜索条件:
(objectCategory=person) (userprincipalname=username@domain*) (samaccountname=username)
C#中的LDAP查询字符串示例:
string search = "(&(&(objectCategory=person)(userprincipalname=" + username + "@" + domain + "*)(samaccountname=" + username + ")))";
编辑:我已经有LDAP查询工作,并返回结果.我想要的只是逃避参数.
以下是我从Sophia提到的Java代码到C#的翻译.
////// Escapes the LDAP search filter to prevent LDAP injection attacks. /// /// The search filter. ////// /// The escaped search filter. private static string EscapeLdapSearchFilter(string searchFilter) { StringBuilder escape = new StringBuilder(); // If using JDK >= 1.5 consider using StringBuilder for (int i = 0; i < searchFilter.Length; ++i) { char current = searchFilter[i]; switch (current) { case '\\': escape.Append(@"\5c"); break; case '*': escape.Append(@"\2a"); break; case '(': escape.Append(@"\28"); break; case ')': escape.Append(@"\29"); break; case '\u0000': escape.Append(@"\00"); break; case '/': escape.Append(@"\2f"); break; default: escape.Append(current); break; } } return escape.ToString(); }
我在一篇关于LDAP注入的博客文章中找到了解决方案
这个解决方案涉及添加你自己的函数来逃避用户名和域名,他的解决方案是Java,但想法就在那里.
MSDN还列出了转义序列需要替换哪些特殊字符.
据我所知,似乎没有任何方法可以在System.DirectoryServices中转义LDAP字符串(就像HttpServerUtility中的URL等)