我想防止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属性。

最佳答案

不可以,您不能在cfqueryparam标记内使用cfldap标记。 cfqueryparam专用于SQL查询。您在正确地思考。永远不要信任用户输入

cfldap标记确实可以为您提供一些保护。


LDAP注入

ColdFusion使用<cfldap>标记与LDAP服务器通信。此标记具有ACTION属性,该属性指示针对LDAP执行的查询。此属性的有效值为:添加,删除,查询(默认),修改和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调用。

关于coldfusion - cfldap是否允许cfqueryparam?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29216792/

10-10 14:32