How to escape a string in C#, for use in an LDAP query(如何在 C# 中转义字符串,以用于 LDAP 查询)
问题描述
我有一个 LDAP 查询,我用它在 C# 中执行搜索.它使用两个字符串变量(用户名和域),出于安全原因需要对其进行转义.
I have an LDAP query, which I am using to perform a search in C#. It uses two string variables (username and domain) which need to be escaped for security reasons.
我应该如何转义字符串?C#.NET 中是否有可用的函数来执行此操作?
How should I escape the strings? Is there a function available in C#.NET to do this?
LDAP 搜索条件示例:
Example LDAP search conditions :
(objectCategory=person)
(userprincipalname=username@domain*)
(samaccountname=username)
C# 中的 LDAP 查询字符串示例:
Example LDAP query string in C# :
string search = "(&(&(objectCategory=person)(userprincipalname="
+ username
+ "@"
+ domain
+ "*)(samaccountname="
+ username
+ ")))";
我已经有 LDAP 查询工作,并返回结果.我想要的只是转义参数.
I already have the LDAP query working, and returning results. All I want is to escape the parameters.
推荐答案
以下是我从Sophia提到的Java代码翻译成C#.
The following is my translation from the Java code mentioned by Sophia into 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(@" 0");
break;
case '/':
escape.Append(@"2f");
break;
default:
escape.Append(current);
break;
}
}
return escape.ToString();
}
这篇关于如何在 C# 中转义字符串,以用于 LDAP 查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何在 C# 中转义字符串,以用于 LDAP 查询
基础教程推荐
- C# - 将浮点数转换为整数...并根据余数更改整数 2022-01-01
- 使用 SED 在 XML 标签之间提取值 2022-01-01
- C# - 如何列出发布到 ASPX 页面的变量名称和值 2022-01-01
- 如何使用OpenXML SDK将Excel转换为CSV? 2022-01-01
- 当键值未知时反序列化 JSON 2022-01-01
- 从 VB6 迁移到 .NET/.NET Core 的最佳策略或工具 2022-01-01
- 覆盖 Json.Net 中的默认原始类型处理 2022-01-01
- 我什么时候应该使用 GC.SuppressFinalize()? 2022-01-01
- 创建属性设置器委托 2022-01-01
- Page.OnAppearing 中的 Xamarin.Forms Page.DisplayAlert 2022-01-01