Это законная защита от внедрения LDAP?

Наше программное обеспечение берет имя пользователя из пользовательского ввода и помещает его в ldap-запрос следующим образом:

(& () (sAMAccountName=userinput))

Мне это кажется очень подозрительным, но до сих пор я не мог сломать его, используя недостающие средства санитарии. Я всегда получаю «не хватает равно», как только пробую использовать какие-либо специальные символы. может быть, com.sun.jndi.ldap.Filter.encodeFilter позаботится об этом?


person tuexss    schedule 15.11.2012    source источник


Ответы (1)


Одна вещь, на которую следует обратить внимание при внедрении LDAP, - это подстановочный знак ('*') в конце пользовательского ввода. Это вполне допустимый символ для поисковых запросов, но если вы ожидаете уникального имени пользователя, вам обязательно нужно очистить его, прежде чем создавать фильтр и передавать его. Для этого обычно используются регулярные выражения.

Код для Java-класса Filter можно найти здесь:

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

Похоже, именно функция encodeSimpleFilter выдает исключение Missing 'equals'.

Если вы хотите проверить последний фильтр LDAP, переданный в AD, вы можете легко использовать WireShark для незашифрованных соединений или просмотреть запрос, используя информацию из этого потока serverfault:

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

person Gregg Browinski    schedule 16.11.2012