有人问过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注入?