cfldap允许cfqueryparam吗?

时间:2015-03-23 17:40:10

标签: coldfusion coldfusion-10 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。

1 个答案:

答案 0 :(得分: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 developer security guidelines的第14页。它是为ColdFusion 8编写的,但如果不是全部,它仍然是相关的。有一个updated version of the document for ColdFusion 11但它实际上也引用了版本8文档作为参考。

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