2

我正在使用 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 注入的一种方式,我计划实施它们。但如果可能的话,我更愿意使用所有三种方法。

4

2 回答 2

3

我有点惊讶文档似乎没有提到这一点。但是escape_filter_chars,我相信有一个实用功能是您正在寻找的:

from ldap3.utils import conv

attribute = conv.escape_filter_chars("bar)", encoding=None)
query = "(foo={0})".format(attribute)
conn.search(search, query)
于 2019-06-14T07:26:18.187 回答
1

我相信在 python3 中防止 LDAP 注入的最好方法是使用Abstraction Layer

示例代码:

# 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()

注意查询是如何抽象的?如果有人试图在此处注入搜索,则查询将出错。此外,此搜索受Reader而不是Writer保护。ldap3 文档涵盖了所有这些。

于 2018-01-16T22:18:48.283 回答