如何防止python3的ldap3中的LDAP注入

如何防止python3的ldap3中的LDAP注入,python,ldap,code-injection,python-ldap,ldap3,Python,Ldap,Code Injection,Python Ldap,Ldap3,我正在使用ldap3库编写一些python3代码,并试图阻止LDAP注入。OWASP注入预防备忘单建议使用安全/参数化API(除其他外)。但是,我在ldap3文档中找不到用于组合搜索查询的安全API或安全方法。文档中的大多数搜索查询都使用硬编码字符串,如下所示: conn.search('dc=demo1,dc=freeipa,dc=org', '(objectclass=person)') 我试图避免以类似以下方式组合查询: conn.search(search, '(accAttrib='

我正在使用ldap3库编写一些python3代码,并试图阻止LDAP注入。OWASP注入预防备忘单建议使用安全/参数化API(除其他外)。但是,我在ldap3文档中找不到用于组合搜索查询的安全API或安全方法。文档中的大多数搜索查询都使用硬编码字符串,如下所示:

conn.search('dc=demo1,dc=freeipa,dc=org', '(objectclass=person)')
我试图避免以类似以下方式组合查询:

conn.search(search, '(accAttrib=' + accName + ')')
此外,文档中似乎没有提到“注入”或“逃逸”或类似概念。是否有人知道这个库中是否完全缺少这个函数,或者是否有一个类似的Python库提供了一个安全的/参数化的API?或者以前有没有人遇到并解决过这个问题


最后一点:我看到了其他StackOverflow问题,它们指出了如何使用白名单验证或转义来防止LDAP注入,我计划实现它们。但是如果可能的话,我更愿意使用这三种方法。

我认为防止python3中LDAP注入的最好方法是使用

示例代码:

# First create a connection to ldap to use.
# I use a function that creates my connection (abstracted here)
conn = self.connect_to_ldap()

o = ObjectDef('groupOfUniqueNames', conn)
query = 'Common Name: %s' % cn
r = Reader(conn, o, 'dc=example,,dc=org', query)
r.search()

注意查询是如何抽象的吗?如果有人试图在此处插入搜索,则查询将出错。此外,此搜索受读卡器的保护,而不是受写卡器的保护。ldap3文档经历了所有这些。

我有点惊讶文档中似乎没有提到这一点。但是,有一个实用功能
escape\u filter\u chars
,我相信这就是您想要的:

从ldap3.utils导入conv
属性=conv.escape\u过滤器\u字符(“条)”,编码=None)
query=“(foo={0})”。格式(属性)
conn.search(搜索、查询)

是否遇到带有参数语法的筛选器?e、 g.
”(accAttrib={0})
,提供的参数是
accName
?类似于SQL语句。Python应该在其API中提供这一点。以前从未见过它们!谢谢