cfldap允许cfqueryparam吗?

Nic*_*rie 2 coldfusion cfqueryparam coldfusion-10

我想防止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#">
Run Code Online (Sandbox Code Playgroud)

如果没有cfqueryparam,我将永远不会使用用户输入运行查询(包装用户名和密码输入),但这样的内容甚至可用于cfldap?(如果这有所不同,我们将使用CF10.)

更新:

为了澄清,当我尝试这个时,我得到以下错误:

标记CFLDAP的属性验证错误.它不允许属性CFSQLTYPE,VALUE.

Mig*_*l-F 5

不,您不能在cfqueryparam标签中使用该cfldap标签.它cfqueryparam专门用于SQL查询.你在考虑正确.永远不要信任用户输入

该cfldap标签确实给你本身一些保护.

LDAP注入

ColdFusion使用<cfldap>标记与LDAP服务器通信.此标记具有ACTION属性,该属性指示针对LDAP执行的查询.此属性的有效值为:add,delete,query(default),modify和modifyDN.所有<cfldap>调用都转换为JNDI(Java命名和目录接口)查找.但是,因为<cfldap>包装调用,如果将本机JNDI代码传递给其属性,它将引发语法错误,从而使LDAP注入更加困难.

从ColdFusion 8开发人员安全指南的第14页开始,如果您尚未阅读,请阅读这些指南.它是为ColdFusion 8编写的,但如果不是全部,它仍然是相关的.ColdFusion 11的文档有更新版本,但它实际上也引用了版本8文档作为参考.

我建议你在这里使用白名单方法.您的活动目录对用户名和密码字段有特定要求; 只有小写和大写字母,数字等.创建一个正则表达式,仅检查用户输入的有效字符.如果任一字段包含其他任何内容,则拒绝提交并且不运行该cfldap调用.