Разрешает ли cfldap cfqueryparam?

Я хочу предотвратить атаки SQL-инъекций. У нас есть форма, которая запрашивает имя пользователя и пароль AD пользователя. Тогда наш код обработки выглядит примерно так:

<cfldap name="ldap_result" action="query" server="999.999.999.999" 
attributes="userprincipalname,title,samaccountname,sn,name,mail,cn" 
filter="(&(objectclass=user)(sAMAccountName=#form.username#))"
start="dc=us,dc=company,dc=lan"
scope="subtree"
username="US\#form.username#" 
password="#form.password#">

Я бы никогда не выполнил запрос с пользовательским вводом без cfqueryparam (чтобы обернуть ввод имени пользователя и пароля), но доступно ли что-то подобное даже для cfldap? (Мы на CF10, если это имеет значение.)

ОБНОВЛЕНИЕ:

Чтобы уточнить, когда я попробовал это, я получил следующую ошибку:

Ошибка проверки атрибута для тега CFLDAP. Не допускается использование атрибута(ов) CFSQLTYPE,VALUE.


person Nick Petrie    schedule 23.03.2015    source источник
comment
Что произошло, когда вы попробовали это? Я предполагаю, что это ошибка компиляции со словами, связанными с использованием тега queryparam вне блока cfquery.   -  person Dan Bracuk    schedule 23.03.2015
comment
Я получаю это: Ошибка проверки атрибута для тега CFLDAP. Он не разрешает атрибут (ы) CFSQLTYPE, VALUE.   -  person Nick Petrie    schedule 23.03.2015
comment
Является ли ответ, что в этом нет необходимости, поскольку переменные формы передаются в тег cf, а не непосредственно в SQL-запрос? Можем ли мы полагаться на то, что тег выполняет необходимое экранирование ввода при запросе AD?   -  person Nick Petrie    schedule 23.03.2015
comment
Я второй комментарий @DanBracuk. Разве не было бы проще просто попробовать это вместо того, чтобы тратить время на размещение вопроса на S/O и просить других людей потратить на это свое время?   -  person Adam Cameron    schedule 23.03.2015
comment
Извините за путаницу, Адам. Я пробовал, и это не удалось. Но я не указал это в своем первоначальном посте. Я сделаю обновление для будущих читателей.   -  person Nick Petrie    schedule 29.03.2015


Ответы (1)


Нет, вы не можете использовать тег cfqueryparam в теге cfldap. cfqueryparam используется специально для запросов SQL. Хотя вы правильно думаете. НИКОГДА НЕ ДОВЕРЯЙТЕ ВВОДАМ ПОЛЬЗОВАТЕЛЯ

Тег cfldap сам по себе дает вам некоторую защиту.

Внедрение LDAP

ColdFusion использует тег <cfldap> для связи с серверами LDAP. Этот тег имеет атрибут ACTION, определяющий запрос, выполняемый к LDAP. Допустимые значения для этого атрибута: добавить, удалить, запросить (по умолчанию), изменить и изменитьDN. Все вызовы <cfldap> превращаются в поиск JNDI (Java Naming And Directory Interface). Однако, поскольку <cfldap> оборачивает вызовы, он будет вызывать синтаксические ошибки, если собственный код JNDI передается в его атрибуты, что затрудняет внедрение LDAP.

На странице 14 рекомендаций по безопасности для разработчиков ColdFusion 8, которые вы следует прочитать, если вы еще этого не сделали. Он был написан для ColdFusion 8, но многое, если не все, все еще актуально. Существует обновленная версия документа. для ColdFusion 11, но на самом деле он также ссылается на документ версии 8 как на ссылку.

Я бы посоветовал вам использовать подход белого списка. Ваш активный каталог имеет особые требования к полям имени пользователя и пароля; только строчные и прописные буквы, цифры и т. д. Создайте регулярное выражение, которое проверяет ввод пользователя только на наличие этих допустимых символов. Если какое-либо поле содержит что-либо еще, отклоните отправку и не запускайте вызов cfldap.

person Miguel-F    schedule 23.03.2015
comment
Спасибо за это разъяснение. На самом деле я думал, что могу пойти по пути REReplace. Это немного неприятно, так как я не устанавливаю правила требований/ограничений к паролям, поэтому мне нужно отслеживать эти правила и полагаться на кого-то другого, чтобы поддерживать их. Но, это лучше ИМО, чем бесплатно для всех. - person Nick Petrie; 23.03.2015
comment
Согласованный. С этим подходом будет некоторое обслуживание (если/когда правила изменятся), но определенно не хочу разрешать что угодно. - person Miguel-F; 23.03.2015
comment
OWASP также предоставляет эталонную реализацию encodeForLDAp(): owasp-esapi-java.googlecode.com/svn/trunk_doc/latest/org/owasp/. Если кто-то использует ненадежные значения, также следует активно кодировать их правильно. - person Adam Cameron; 23.03.2015