如何在C#中转义字符串,以便在LDAP查询中使用
我有一个LDAP查询,我用它来在C#中执行搜索。 它使用两个字符串变量(用户名和域),出于安全原因需要对其进行转义。
我该怎么逃避弦乐? C#.NET中是否有可用的function来执行此操作?
示例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(@" 0"); break; case '/': escape.Append(@"2f"); break; default: escape.Append(current); break; } } return escape.ToString(); }
我在一篇关于LDAP注入的博客文章中找到了解决方案
这个解决方案涉及添加自己的函数来逃避用户名和域名,他的解决方案是Java,但想法就在那里。
MSDN还列出了转义序列需要替换哪些特殊字符。
据我所知,似乎没有任何方法可以在System.DirectoryServices中转义LDAP字符串(就像HttpServerUtility中的URL等)
使用地址: https ://www.nuget.org/packages/AntiXss中的AntiXss库
string encoded = Microsoft.Security.Application.Encoder.LdapFilterEncode(input);
也许让其他人担心呢? 请参阅LINQtoAD 。
您是否试图通过用户输入阻止对目录服务器的某种注入攻击? 如果是这种情况,我会在将输入传递给LDAP之前使用Regexvalidation输入。
将PInvoke与DsQuoteRdnValueW
一起DsQuoteRdnValueW
。 有关代码,请参阅我对其他问题的回答: https : //stackoverflow.com/a/11091804/628981
上述就是C#学习教程:如何在C#中转义字符串,以便在LDAP查询中使用分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/955321.html