这是针对LDAP注入的合法保护吗?

时间:2012-11-15 16:20:03

标签: ldap code-injection protection sanitize

我们的软件从用户输入中获取用户名,并将其放入ldap请求中,如下所示:

(& () (sAMAccountName=userinput))
它对我来说看起来很腥,但到目前为止,我无法利用缺少的卫生设施打破它。一旦我尝试任何特殊字符,我总是会“错过平等”。是不是com.sun.jndi.ldap.Filter.encodeFilter正在处理这个问题?

1 个答案:

答案 0 :(得分:1)

注意LDAP注入的一件事是用户输入末尾的通配符('*')。它对于搜索查询来说是一个非常有效的字符,但是如果您期望一个唯一的用户名,那么在构建过滤器并将其传递之前,您一定要清理它。正则表达式通常用于此目的。

可以在此处找到Java Filter类的代码:

http://www.docjar.com/html/api/com/sun/jndi/ldap/Filter.java.html

看起来encodeSimpleFilter函数会抛出 Missing'等于'异常。

如果要检查传递给AD的最终LDAP过滤器,可以轻松地将WireShark用于未加密的连接,或者使用来自此serverfault线程的信息查看查询:

https://serverfault.com/questions/280042/how-do-you-trace-debug-ldap-connections-against-active-directory