首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL中的模糊查询

SQL中的模糊查询
EN

Stack Overflow用户
提问于 2013-02-20 23:59:54
回答 1查看 716关注 0票数 3

我正在尝试将Linux包的信息(名称+版本)映射到它们对应的CPE字符串(参见http://nvd.nist.gov/cpe.cfm),以便能够自动发现系统可能存在的漏洞。

NIST提供了一个XML文档,其中包含所有相关的CPE。我考虑将这些信息解析到一个SQL数据库中,这样我就可以按名称和版本号快速搜索。这将是大约70.000行。

当然,现在的问题是CPE和包名的拼写不同。例如,Tomcat6.0.36的CPE将是cpe:/a:apache:tomcat:6.0.36,因此您的名称为tomcat,版本为6.0.36。现在,包管理器可以为您提供类似于tomcat6的名称和6.0.36-3的版本。这两个程序很可能是相同的,或者至少有相同的漏洞。因此,我需要能够自动识别上面提到的CPE作为我的tomcat包的正确CPE。

首先要做的是某种标准化,可能会将所有内容都转换为小写。但正如您从示例中看到的,这还不够。我需要一些模糊的搜索。根据我已经发现的,有一些在拼写错误的情况下识别匹配的解决方案。不过,这并不完全是我需要的。软件包名称没有拼写错误,但可能包含其他字符(或缺少某些字符)。

模糊搜索也必须相对较快,因为我需要对多个主机执行模糊搜索,每个主机可能安装了数百个包,正如我所说的,数据库将有大约70.000行。我可以引入一个主要的查找,它试图首先找到一个精确的匹配,但由于我怀疑许多包将没有任何相应的CPE字符串,这不会太明显地减少数量。

另一个限制是,解决方案应该在非专有数据库上工作,因为我没有经济能力做任何其他事情。

那么,有没有什么东西符合这些要求呢?或者,除了某种模糊搜索之外,你还能想出任何解决我的问题的方法吗?

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2013-02-21 01:10:01

首先,是一般性的评论。CPE的命名似乎是有机演变的,通常取决于供应商的(不一致的)命名。例如,Sun Java有major.minor.point_version。Adobe使用major.minor.point.subpoint。微软操作系统使用服务Packs_Language包。其他一些供应商会使用点版本,主要是数字,但偶尔会有字母(例如,.8,.9,.9R2,.10)。

当我处理所述的问题时,我从他们的XML文件开始,并在Excel中对它们进行操作,对句点进行拆分。然后,我将按数字(如果它们都是数字)或文本字符串进行排序。(请注意,散布在大多数数字中的字母会造成严重破坏,并且在词法上,.10出现在.8之前)

这种不一致就是为什么第三方软件供应商如雨后春笋般涌现。公司宁愿付钱给软件供应商,也不愿解开这个棘手的难题。

如果你想要一个真正的模糊搜索,请看看这个关于using Soundex的问题。预计会得到大量的误报。

如果您的目标是准确地映射CPE字符串,那么您可能应该考虑实现一个从CPE转换为库名的查找表。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14984342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档