Sop*_*hia 15 .net c# ldap active-directory ldap-query
我有一个LDAP查询,我用它来在C#中执行搜索.它使用两个字符串变量(用户名和域),出于安全原因需要对其进行转义.
我应该如何摆脱弦乐?C#.NET中是否有可用的功能来执行此操作?
示例LDAP搜索条件:
(objectCategory=person)
(userprincipalname=username@domain*)
(samaccountname=username)
Run Code Online (Sandbox Code Playgroud)
C#中的LDAP查询字符串示例:
string search = "(&(&(objectCategory=person)(userprincipalname="
+ username
+ "@"
+ domain
+ "*)(samaccountname="
+ username
+ ")))";
Run Code Online (Sandbox Code Playgroud)
编辑:我已经有LDAP查询工作,并返回结果.我想要的只是逃避参数.
Jeo*_*uan 29
以下是我从Sophia提到的Java代码到C#的翻译.
/// <summary>
/// Escapes the LDAP search filter to prevent LDAP injection attacks.
/// </summary>
/// <param name="searchFilter">The search filter.</param>
/// <see cref="https://blogs.oracle.com/shankar/entry/what_is_ldap_injection" />
/// <see cref="http://msdn.microsoft.com/en-us/library/aa746475.aspx" />
/// <returns>The escaped search filter.</returns>
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();
}
Run Code Online (Sandbox Code Playgroud)
我在一篇关于LDAP注入的博客文章中找到了解决方案
这个解决方案涉及添加你自己的函数来逃避用户名和域名,他的解决方案是Java,但想法就在那里.
MSDN还列出了转义序列需要替换哪些特殊字符.
据我所知,似乎没有任何方法可以在System.DirectoryServices中转义LDAP字符串(就像HttpServerUtility中的URL等)
| 归档时间: |
|
| 查看次数: |
13832 次 |
| 最近记录: |