使用DirectorySearcher时如何防止LDAP注入

时间:2018-08-01 18:57:07

标签: c# .net ldap code-injection

有人问过before,但是答案已经过时了,我想知道现代方法是什么。

我有一些C#代码,用于在Active Directory中搜索具有雇员ID为id的雇员,该字符串可能来自Web表单或某种形式,并且不能被完全信任。

DirectorySearcher search = new DirectorySearcher(new DirectoryEntry());
search.Filter = "(&(objectClass=user)(employeeid=" + id + "))";
search.PropertiesToLoad.Add("mail");
search.PropertiesToLoad.Add("telephonenumber");
SearchResult sresult = search.FindOne();

如您所见,输入id值将执行我实际上并不打算执行的操作并不难。 OWASP considers this是一个严重的漏洞。防止这种情况的最佳现代方法是什么?

如果有正在积极维护的替代库功能,我不希望自己的代码like this手动替换特定字符。

我在任何地方都看到过的最佳解决方案是使用AntiXSS库:

string encoded = Microsoft.Security.Application.Encoder.LdapFilterEncode(id);

但是it appears不再维护该库:

  

AntiXSS现已终止生命   在.NET 4.0中,该框架包含一个AntiXSS版本,并且   可以通过配置启用。在ASP.NET v5中,基于白名单   编码器将是唯一的编码器。   因此,应将AntiXSS的独立版本视为报废。   来源和安装程序将保持在线状态,允许人们使用   .NET的早期版本,以启用基于白名单的替代方法   编码,但除了安全修复程序之外,没有其他进一步的增强将   被制成。

很多答案都指向LinqtoAD,这听起来确实是个不错的方法,但是不幸的是,这听起来似乎还不具备生产准备:

  

免责声明   该项目是实现自定义LINQ的基本示例   查询提供者。尚未经过全面测试,我们没有   提供任何支持。不要在生产中使用它   没有适当测试和验证技术的环境   行为。欢迎用户通过以下方式报告问题和错误:   此网站上的问题跟踪器。

什么是现代方法? .net框架的较新版本中是否有任何内容可以减轻LDAP注入?

0 个答案:

没有答案