| name | sensitive-info-detector |
| description | 检测和提取网页中的敏感信息。自动获取目标页面内容,使用多维度正则规则识别 API 端点、凭据、云服务密钥、个人隐私数据、服务器指纹等 19 类信息,并以结构化方式分类展示。 |
| arguments | [{"name":"url","description":"要分析的目标网页 URL","required":true}] |
敏感信息检测器 (Sensitive Info Detector)
基于 SnowEyes 的正则规则体系,自动获取网页内容并进行多维敏感信息检测与分类。
检测能力概览
| 类别 | 检测项 | 来源规则 |
|---|
| 路径发现 | 域名、API(绝对/相对)、模块路径、JS/Vue/图片/文档文件 | API + DOMAIN patterns |
| 凭据泄漏 | 用户名密码、Cookie/Token、ID密钥(12种云服务) | CREDENTIALS + ID_KEY + COOKIE |
| 个人隐私 | 手机号、邮箱、身份证、JWT | PHONE + EMAIL + IDCARD + JWT |
| 资源链接 | URL、GitHub链接 | URL patterns |
| 组织信息 | 公司机构名称 | COMPANY patterns |
| 指纹识别 | Webpack/Django/Cloudflare/CDN 等 | FINGER patterns |
工作流程
步骤 1: 获取页面内容
使用 webfetch 工具以 text 或 html 格式获取目标 URL 的原始内容:
webfetch(url: "<目标URL>", format: "text")
若目标页面依赖 JS 渲染,额外尝试获取页面中引用的 JS 文件以进行深度扫描。
步骤 2: 执行多维度正则匹配
对获取到的内容,按以下分类依次执行正则匹配。每条匹配结果附上来源行上下文(匹配位置前后各 40 字符)。
2.1 API 端点检测
正则: /['\"\x60](?:\/|\.\.\/|\.\/)[^\/\>\< \)\(\}\,\'\"\\](?:[^\^\>\< \)\(\,\'\"\\])*?['\"\x60]|['\"\x60][a-zA_Z0-9]+(?<!text|application)\/(?:[^\^\>\< \)\(\{\}\,\'\"\\])*?[\"'\x60]/g
- 绝对路径: 以
/ 开头
- 相对路径: 不以
/ 或 ./ 开头但含 /
- 模块路径: 以
./ 开头
- 文件类型分流:
.vue / .jpg|.png|.gif|.svg|.ico / .js|.jsx|.ts|.tsx / .pdf|.doc|.xls|.zip 等
过滤: 跳过 node_modules/、static/js/、static/css/、日期格式路径等。
2.2 域名检测
正则 (HTML): /\b(?:(?!this)[a-z0-9%-]+\.)*?(?:(?!this)[a-z0-9%-]{2,}\.)(?:wang|club|xyz|vip|top|beer|work|ren|technology|fashion|luxe|yoga|red|love|online|ltd|chat|group|pub|run|city|live|kim|pet|space|site|tech|host|fun|store|pink|ski|design|ink|wiki|video|email|company|plus|center|cool|fund|gold|guru|life|team|today|world|zone|social|bio|black|blue|green|lotto|organic|poker|promo|vote|archi|voto|fit|cn|website|press|icu|art|law|shop|band|media|cab|cash|cafe|games|link|fan|net|cc|com|fans|cloud|info|pro|mobi|asia|studio|biz|vin|news|fyi|tax|tv|market|shopping|mba|sale|co|org)(?:\:\d{1,5})?(?![a-zA-Z0-9._=>\(\);!}-])\b/g
2.3 IP 地址检测
正则: /(?<!\.|\d)(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)(?::\d{1,5})?(?!\.|[0-9])/g
过滤: 排除 0.0.0.0 和 255.255.255.255。
2.4 手机号检测
正则: /(?<!\d|\.)(?:13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9]|198|199)\d{8}(?!\d)/g
2.5 邮箱检测
正则: /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+(?!\.png)\.[a-zA-Z]{2,}(?:\.[a-zA-Z]{2,})?/g
2.6 身份证号检测
正则: /(?:\d{6}(?:19|20)(?:0\d|10|11|12)(?:[0-2]\d|30|31)\d{3}$)|(?:\d{6}(?:18|19|20)\d{2}(?:0[1-9]|10|11|12)(?:[0-2]\d|30|31)\d{3}(?:\d|X|x))(?!\d)/g
2.7 JWT Token 检测
正则: /[\"'](?:ey[A-Za-z0-9_-]{10,}\.[A-Za-z0-9._-]{10,}|ey[A-Za-z0-9_\/+-]{10,}\.[A-Za-z0-9._\/+-]{10,})[\"']/g
2.8 URL 检测
正则: /(?:https?|wss?|ftp):\/\/(?:(?:[\w-]+\.)+[a-z]{2,}|(?:\d{1,3}\.){3}\d{1,3})(?::\d{2,5})?(?:\/[^\s\>\)\}\<'"]*)?/gi
子分类: 包含 github.com/ 的归入 GitHub 链接。
2.9 凭据检测 (用户名/密码)
模式 1: /['\"]\w*(?:pwd|pass|user|member|account|password|passwd|admin|root|system)[_-]?(?:id|name)?[0-9]*[\"']\s*[:=]\s*(?:['\"][^\,\s\"\(]*[\"'])/gi
模式 2: /\w*(?:pwd|pass|user|member|account|password|passwd|admin|root|system)[_-]?(?:id|name)?[0-9]*\s*[:=]\s*(?:['\"][^\,\s\"\(]*[\"'])/gi
模式 3: /['\"]\w*(?:pwd|pass|user|member|account|password|passwd|admin|root|system)[_-]?(?:id|name)?[0-9]*\s*[:=]\s*(?:[^\,\s\"\(]*)[\"']/gi
过滤: 排除空值、中文值、以 coord 开头的 key、值为 true|false|register|signUp|basic|http 等常见词。
2.10 Cookie/Token 检测
正则: /\b\w*(?:token|PHPSESSID|JSESSIONID)\s*[:=]\s*[\"']?(?!localStorage)(?:[a-zA-Z0-9-._]{4,})[\"']?/ig
过滤: 排除长度<4 的 value、key==value 的情况、常见短词黑名单。
2.11 云服务密钥检测
微信开放平台: /wx[a-z0-9]{15,18}/g
AWS: /AKIA[0-9A-Z]{16}/g
阿里云: /LTAI[A-Za-z\d]{12,30}/g
Google API: /AIza[0-9A-Za-z_\-]{35}/g
腾讯云: /AKID[A-Za-z\d]{13,40}/g
京东云: /JDC_[0-9A-Z]{25,40}/g
AWS 扩展: /(?:A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}/g
支付宝: /(?:AKLT|AKTP)[a-zA-Z0-9]{35,50}/g
GitLab: /glpat-[a-zA-Z0-9\-=_]{20,22}/g
GitHub: /(?:ghp|gho|ghu|ghs|ghr|github_pat)_[a-zA-Z0-9_]{36,255}/g
Apple: /APID[a-zA-Z0-9]{32,42}/g
企业微信: /ww[a-z0-9]{15,18}/g
通用 Key: /(?:[\"']?(?:[\w-]*(?:secret|oss|bucket|key)[\w-]*)|ak[\"']?)\s*[:=]\s*(?:\"(?!\+)[^\,\s\"\(\>\<]{6,}\"|'(?!\+)[^\,\s\'\(\>\<]{6,}'|[0-9a-zA-Z_-]{16,})/ig
32位哈希: /[\"'][a-zA-Z0-9]{32}[\"']/g
2.12 公司名称检测
正则: /(?:[\u4e00-\u9fa5\uff08\uff09]{4,15}[^的](?:公司|中心)|[\u4e00-\u9fa5\uff08\uff09]{2,10}[^的](?:软件)|[\u4e00-\u9fa5]{2,15}(?:科技|集团))(?!法|点|与|查)/g
过滤: 排除包含黑名单中文词的结果(如"请"、"输入"、"前往"、"使用"等)。
2.13 指纹识别
在页面内容中搜索以下特征:
| 特征 | 模式 | 分类 |
|---|
| Webpack | webpackJsonp, __webpack_require__, webpack-dev-server | 构建工具 |
| Django | csrfmiddlewaretoken | 框架 (Python) |
| Cloudflare CDN | cdnjs.cloudflare.com | CDN |
| jsDelivr CDN | cdn.jsdelivr.net | CDN |
| Visual Studio | visual studio | 开发工具 |
| Webpack chunk | chunk/main/app/vendor/common + hash .js/.css | 构建工具 |
如果使用了 webfetch 的 html 格式,还尝试检测响应头中的指纹(如 Server、X-Powered-By、Set-Cookie 中的技术标识)。
步骤 3: 结果去重与过滤
- 同类别内去重
- 应用关键词黑名单过滤假阳性:
- 短值黑名单:
up, in, by, of, is, on, to, no, age, all, app... (共 100+ 词)
- 中值黑名单:
null, node, when, face, read, load, body, left... (共 130+ 词)
- 长值黑名单:
about, alias, apply, array, basic, button, cancel... (共 50+ 词)
- 凭据类过滤空值、中文值、常见变量名
步骤 4: 结构化输出
按以下格式分类展示:
## 检测报告: <目标URL>
### API 端点 (N)
| 路径 | 类型 | 来源 |
|------|------|------|
| /api/users | 绝对路径 | <URL> |
| ./utils/helper | 模块路径 | <URL> |
### 域名 (N)
| 域名 | 来源 |
|------|------|
| example.com | <URL> |
### IP 地址 (N)
| IP | 来源 |
|----|------|
| 192.168.1.1 | <URL> |
### 凭据 (N)
| 类型 | 值片段 | 来源 |
|------|--------|------|
| password | pass***123 | <URL> |
### 云服务密钥 (N)
| 平台 | 密钥前缀 | 来源 |
|------|----------|------|
| AWS | AKIA**** | <URL> |
### 个人隐私 (N)
| 类型 | 值(脱敏) | 来源 |
|------|-----------|------|
| 手机号 | 138****1234 | <URL> |
### 指纹识别 (N)
| 类型 | 名称 | 分类 |
|------|------|------|
| 构建工具 | Webpack | builder |
### 文件资源 (N)
| 文件 | 类型 | 来源 |
|------|------|------|
| main.js | JavaScript | <URL> |
### 其他 (N)
- URL: N 个
- GitHub 链接: N 个
- 公司机构: N 个
隐私保护: 对于手机号、邮箱、身份证、密钥等敏感数据,展示时做部分脱敏处理(如 138****1234)。
步骤 5: 深度扫描 (可选)
若页面内容中包含 JS 文件引用,对同源 JS 文件递归执行步骤 1-4,最大深度 3 层,最多并发 5 个请求。
跳过以下第三方库的 JS 文件:
- jQuery, Vue, React, Bootstrap, Layui, Element-UI, ECharts, Lodash, Moment, Axios 等
- 匹配模式参考:
/^(jquery|vue|react|bootstrap|layui|echarts|lodash|moment|axios)[.-]?\d*\.?\d*\.?\d*(?:\.min)?\.js$/i
注意事项
- 目标 URL 必须可通过 HTTP/HTTPS 公开访问
- 单次检测限制在 20 个 JS 深度扫描请求以内,避免超时
- 凭据和密钥类结果仅做脱敏展示,不记录到文件
- 本工具仅用于授权安全评估,不得用于未授权测试
- 检测结果仅供安全研究人员在合法授权范围内使用