当前位置:  开发笔记 > 编程语言 > 正文

如何在C#中转义字符串,以便在LDAP查询中使用

如何解决《如何在C#中转义字符串,以便在LDAP查询中使用》经验,为你挑选了2个好方法。

我有一个LDAP查询,我用它来在C#中执行搜索.它使用两个字符串变量(用户名和域),出于安全原因需要对其进行转义.

我应该如何摆脱弦乐?C#.NET中是否有可用的功能来执行此操作?


示例LDAP搜索条件:

(objectCategory=person)
(userprincipalname=username@domain*)
(samaccountname=username)

C#中的LDAP查询字符串示例:

string search = "(&(&(objectCategory=person)(userprincipalname=" 
        + username 
        + "@"
        + domain 
        + "*)(samaccountname=" 
        + username 
        + ")))";

编辑:我已经有LDAP查询工作,并返回结果.我想要的只是逃避参数.



1> Jeow Li Huan..:

以下是我从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();
}



2> Sophia..:

我在一篇关于LDAP注入的博客文章中找到了解决方案

这个解决方案涉及添加你自己的函数来逃避用户名和域名,他的解决方案是Java,但想法就在那里.

MSDN还列出了转义序列需要替换哪些特殊字符.

据我所知,似乎没有任何方法可以在System.DirectoryServices中转义LDAP字符串(就像HttpServerUtility中的URL等)

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有