Repository navigation
v0.1
优化与改进记录
本工具在初始版本的基础上,进行了一系列旨在提升准确性、健壮性和可用性的核心功能优化。
1. 自定义敏感信息正则
- 问题:
- 原版本将敏感信息的正则表达式硬编码在程序中,用户无法根据自己的需求灵活地添加、修改或删除规则。
- 解决方案:
- 对配置加载逻辑进行了重构。现在,所有的敏感信息匹配规则(如
AKSK,Email,Phone等)都已外置到config.yaml文件中。 - 用户可以直接编辑
config.yaml的infoFind部分,为任意一个类别(如Phone)添加新的正则表达式,或者创建全新的类别和规则,实现了完全的自定义和可扩展性。
- 对配置加载逻辑进行了重构。现在,所有的敏感信息匹配规则(如
2. 扩展敏感信息规则库
- 问题:
- 原版内置的正则规则较少,仅能覆盖几种常见的个人信息。
- 解决方案:
- 极大地扩展了默认的敏感信息规则库,新增了对
AK/SK,UUID Token,Webhook,Grafana密钥,数据库连接字符串(JDBC)等8种以上高价值目标的检测能力,使工具的发现范围和实战价值得到质的提升。
- 极大地扩展了默认的敏感信息规则库,新增了对
3. 敏感信息报告逻辑重构
- 问题:
- 原版在生成报告时,为每一种敏感信息(如手机、邮箱)都编写了独立的、重复的输出代码,导致代码冗长且难以维护和扩展。
- 解决方案:
- 对敏感信息的存储结构(
mode.Info)和报告生成函数(如OutFileCsv,Print)进行了彻底重构。新的设计采用统一的键值对(Key-Matches)来存储所有类型的发现,并使用一段通用的循环逻辑来生成报告。
- 对敏感信息的存储结构(
- 价值:
- 此项重构不仅减少了超过80%的重复代码,还极大地提升了程序的可扩展性。现在,当新增一种敏感信息规则时,开发者不再需要修改任何报告相关的代码,程序会自动适应并正确输出新类型的结果。
4. 邮箱发现功能优化
- 问题:
- 漏报: 最初的正则只能匹配到位于行首的邮箱,导致遗漏大量硬编码在代码中间的邮箱地址。
- 误报: 简单的正则无法区分真实的邮箱和格式碰巧类似邮箱的普通字符串。
- 解决方案:
- 修正正则: 去掉了正则表达式中的行首限定符 (
^),确保能发现所有位置的潜在邮箱。 - 引入二次验证: 在
crawler/find.go中,对所有正则匹配到的结果,引入Go标准库net/mail进行权威的RFC格式校验,只有通过校验的才被认定为有效邮箱,极大地降低了误报率。
- 修正正则: 去掉了正则表达式中的行首限定符 (
5. IP地址发现功能优化
- 问题:
- 误报: 工具会将某些加密算法的OID常量(如
2.16.840.1.101.3.4.1.42)错误地识别为IP地址。 - 代码健壮性: 原有的IP地址过滤逻辑为自定义实现,不够专业和全面。
- 误报: 工具会将某些加密算法的OID常量(如
- 解决方案:
- 重构验证函数: 在
crawler/find.go中,重写了isLikelyRealIP函数。新函数使用标准库net.ParseIP进行格式验证,并用ip.IsUnspecified()等标准方法替代了手写的过滤规则,使代码更健壮、意图更清晰。 - 更新黑名单: 根据实际案例,在OID过滤列表中加入了新的前缀,以精确屏蔽由加密常量导致的误报。
- 重构验证函数: 在
6. 正则表达式健壮性修复
- 问题:
- 程序中部分用于解析HTML的正则表达式存在语法缺陷,在遇到特定边缘情况时可能导致程序崩溃。
- 解决方案:
- 全面审查并修正了这些存在缺陷的正则表达式,通过使用反引号定义等方式,避免了特殊字符的转义问题,提升了爬虫的稳定性。
7. 敏感信息报告去重
- 问题:
- 如果同一个文件中多次出现相同的敏感信息(如同一个IP或同一个密钥特征),报告中会产生大量重复条目,干扰核心信息的提取。
- 解决方案:
- 在
crawler/find.go的infoFind函数中,实现了一套精确的去重逻辑。该逻辑会以【来源文件名】和【具体匹配到的值】作为联合键,确保任何一个具体的值在同一个文件中只被报告一次,显著提升了报告的信噪比和可用性。
- 在
8. URL及JS链接去重优化
- 问题:
- 在对大型网站进行扫描时,经常会发现大量指向相同内容的URL(例如,多个API接口返回大小和内容都一致的JSON数据),导致最终报告中存在大量冗余信息,难以分析。
- 解决方案:
- 在
crawler/state.go中,引入了一套全新的、基于结果属性的去重机制。 - 去重策略: 程序不再使用对内容极其敏感的MD5哈希校验,而是根据
状态码(Status) + 响应大小(Size) + 页面标题(Title)这三个核心字段组合成一个唯一键。 - 实现效果: 只有当一个URL或JS的这三个属性组合是第一次出现时,它才会被记录。这能有效过滤掉所有内容实质上等价的重复链接,同时又保留了被标记为“疑似危险路由”的URL(因为它们的处理逻辑被刻意绕过了去重),极大地提升了报告的清晰度和可用性。
- 在