我想防止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.It的属性验证错误不允许属性CFSQLTYPE,值。
发布于 2015-03-23 19:06:35
不,您不能在您的cfqueryparam标记中使用cfldap标记。cfqueryparam专门用于SQL查询。不过,你的思维是正确的。从不信任用户输入
cfldap标记本身确实为您提供了一些保护。
LDAP注入 ColdFusion使用
<cfldap>标记与LDAP服务器进行通信。此标记具有一个ACTION属性,该属性指示对LDAP执行的查询。此属性的有效值是:添加、删除、查询(默认)、修改和modifyDN。所有<cfldap>调用都被转换为JNDI ()查找。但是,由于<cfldap>封装了调用,如果将本机JNDI代码传递给其属性,则会引发语法错误,从而使LDAP注入更加困难。
从第14页的ColdFusion 8 developer security guidelines,你应该阅读,如果你还没有这样做。它是为ColdFusion 8编写的,但大部分(如果不是全部)仍然是相关的。有一个updated version of the document for ColdFusion 11,但实际上它也引用了版本8的文档。
我建议你用白名单的方法。您的活动目录对用户名和密码字段有特定的要求;只有小写和大写字母、数字等。创建一个正则表达式,只检查用户输入的那些有效字符。如果任一字段包含任何其他内容,则拒绝提交,并且不运行cfldap调用。
https://stackoverflow.com/questions/29216792
复制相似问题