v3nomtech/V3nom-Intel

GitHub: v3nomtech/V3nom-Intel

纯前端的威胁情报聚合仪表盘,无需后端即可在单一暗色界面中整合并可视化展示全球实时漏洞、恶意指标与安全新闻。

Stars: 1 | Forks: 0

# VENOM/INTEL **签名:** `CYbErXV3nOm` ## 目录 - [它是什么](#what-it-is) - [功能概览](#feature-tour) - [实时数据源](#live-data-sources) - [架构](#architecture) - [工作原理 — 请求流程](#how-it-works--request-flow) - [文件结构(每个文件的作用)](#file-map-what-every-file-does) - [本地预览](#local-preview) - [刷新本地快照](#refreshing-local-snapshots) - [部署到 Netlify](#deploy-to-netlify) - [CORS 的处理方式](#how-cors-is-handled) - [缓存策略](#caching-strategy) - [自定义](#customization) - [隐私与法律声明](#privacy--legal) - [技术栈](#tech-stack) ## 它是什么 VENOM/INTEL 是一个**静态威胁情报仪表盘**。它没有后端数据库,没有用户账户,也没有追踪。页面在浏览器中加载后,会调用一些公开的 API 和 RSS 订阅源,将响应标准化,并渲染: - 最新的 CVE 及其 EPSS 漏洞利用概率评分 - CISA 已知被利用漏洞 (KEV) 目录 - 一个派生的**活跃漏洞利用追踪器**,使用 KEV ∩ EPSS ∩ 勒索软件使用情况来对“优先修补此漏洞”进行排名 - 一个动画版的**全球威胁地图**,在 Leaflet 地图上绘制活跃的 C2 服务器 - 最近的恶意软件 IOC、恶意 URL、活跃的僵尸网络 C2 IP - 最近的公开数据泄露事件 - 汇总的信息安全新闻 + 漏洞利用发布订阅源 - 一个 **IOC 信誉查询**(粘贴 IP、域名、URL、哈希值或 CVE-ID) - 一个精心策划的 OSINT 目录(值得关注的研究人员和组织) - 实时图表:严重程度分布、随时间变化的 KEV、顶级供应商、恶意软件家族、按国家/地区划分的 C2、EPSS 前 15 名 所有内容每 15 分钟自动更新一次(也可以通过每个部分的刷新按钮或顶部的**全部刷新**按钮按需更新)。 ## 功能概览 | 部分 | 展示内容 | 构建方式 | |---|---|---| | **Hero / 数据条** | 8 个实时计数器:CVE (7天)、KEV 总数、严重 (7天)、KEV (30天)、C2 国家/地区、活跃 IOC、活跃 C2、新闻 (24小时) | `updateStats()` + `countUp()` 缓出动画 | | **🎯 活跃漏洞利用追踪器** | 通过优先级评分对每个 KEV CVE 进行排名:勒索软件 = +100,逾期 = +60,新鲜度 ≤ 30天 = +40,EPSS ≥ 0.5 = +30。标签可按勒索软件 / 逾期 / 新鲜 / 高 EPSS 筛选 | `buildExploitList()` 关联 KEV + EPSS,按得分排序 | | **🌐 全球威胁地图** | Leaflet 深色切片地图 (CARTO)。按国家质心绘制 Feodo Tracker C2 IP。脉冲标记(低/中/高层级),实时攻击源(动画曲线弧),包含各国顶级恶意软件的弹窗 | `renderThreatMap()` + `COUNTRY_CENTROIDS` 查找表 + `curvedPath()` 贝塞尔辅助函数 | | **快捷工具 — IOC 查询** | 粘贴 IPv4/v6、域名、URL、MD5/SHA1/SHA256 或 CVE-ID。自动检测类型,交叉比对内存中的威胁源,对 CVE 调用 CIRCL,对域名/IP 调用 URLhaus 主机 API | `IOC.detect()` + `IOC.lookup()` | | **威胁指标图表** | CVE 严重程度甜甜圈图、按月统计的 KEV 条形图 (12个月)、顶级供应商、顶级恶意软件家族 (ThreatFox)、按国家/地区划分的 C2 | Chart.js 4 | | **CISA KEV** | 所有 KEV 漏洞的可排序表格;包含筛选框 | `fetchKEV()` → 本地快照 → 实时 → 代理链 | | **最新 CVE (NVD)** | 过去 7 天 NVD CVE 的卡片网格,带有 EPSS 徽章和产品标签。按严重程度和产品/供应商筛选 | `fetchCVEs()` + `enrichEPSS()` | | **ThreatFox IOCs** | 来自 abuse.ch 的最新恶意软件 IOC | `fetchThreatFox()` | | **URLhaus URLs** | 最近的恶意 URL(网络钓鱼、有效载荷分发、C2 面板),带有指向 VirusTotal 和 MalwareBazaar 的交叉检查链接 | `fetchURLhaus()` | | **Feodo Tracker C2** | 活跃僵尸网络 C2 IP 表格(IP:端口、恶意软件家族、国家/地区、ASN、首次发现时间、状态) | `fetchFeodo()` | | **最近的数据泄露** | XposedOrNot 泄露订阅源:名称、记录数、行业、日期 | `fetchBreaches()` | | **信息安全新闻专线** | 汇总来自 Krebs、Bleeping、The Hacker News、SANS ISC、Dark Reading、The Register、Schneier 的 RSS | `fetchRssSet()` + `parseRss()` | | **漏洞利用源** | Exploit-DB、PacketStorm、GitHub 安全公告 | 相同的 RSS 流水线 | | **OSINT 目录** | 为 CISA、CERT-In、vx-underground、MalwareHunterTeam、Krebs、Beaumont、MSTIC、Google TAG 等精心制作的卡片,包含 X / 博客 / Nitter 链接 | `renderOsint()` 读取 `CONFIG.OSINT_ACCOUNTS` | | **顶栏全局搜索** | 在一个框中搜索 CVE、KEV、新闻和漏洞利用 | `globalSearch()` | | **JSON 导出** | ⬇ JSON 按钮将整个内存中的 `STATE` 快照转储以供下载 | `exportAll()` | | **收藏 / 点赞** | CVE 卡片上的 ★ 会持久化到 `localStorage` | `getStars()` / `toggleStar()` | | **状态胶囊 + 诊断面板** | 每个部分都有一个胶囊(加载中 / 正常 / 已缓存 / 错误)。点击 **显示诊断** 查看每个订阅源的时间线 | `setStatus()` + `renderDiagnostic()` | ## 实时数据源 所有来源均为公开,无需 API 密钥。 | 来源 | 提供的内容 | Endpoint | |---|---|---| | **NIST NVD** | 最新 CVE(7 天窗口) | `services.nvd.nist.gov/rest/json/cves/2.0` | | **CISA KEV** | 已知被利用漏洞目录 | `cisa.gov/.../known_exploited_vulnerabilities.json` | | **FIRST EPSS** | 漏洞利用预测评分系统 — CVE 在未来 30 天内被利用的概率 | `api.first.org/data/v1/epss` | | **CIRCL CVE-Search** | CVE 详情查询(对 CORS 友好) | `cve.circl.lu/api/cve/...` | | **URLhaus (abuse.ch)** | 恶意 URL | `urlhaus.abuse.ch/downloads/json_online/` | | **ThreatFox (abuse.ch)** | 最近的恶意软件 IOC | `threatfox.abuse.ch/export/json/recent/` | | **Feodo Tracker (abuse.ch)** | 活跃僵尸网络 C2 IP(Emotet、Dridex、TrickBot、QakBot 等) | `feodotracker.abuse.ch/downloads/ipblocklist.json` | | **XposedOrNot** | 数据泄露目录 | `api.xposedornot.com/v1/breaches` | | **RSS 订阅源** | 新闻和漏洞利用发布 | Krebs、Bleeping、THN、SANS、Dark Reading、Register、Schneier、Exploit-DB、PacketStorm、GitHub Advisories | ## 架构 ``` ┌─────────────────────────────────────────────────────────────────────┐ │ BROWSER (index.html) │ │ │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ js/app.js (IIFE — single ~1670-line module) │ │ │ │ │ │ │ │ CONFIG ─── URLs, RSS list, OSINT accounts, TTLs │ │ │ │ STATE ─── { cves, kev, news, exploits, urlhaus, │ │ │ │ threatfox, feodo, breach, exploitItems } │ │ │ │ │ │ │ │ fetch layer: timedFetch → proxyFetch → cache │ │ │ │ render layer: renderXxx() + Chart.js + Leaflet │ │ │ │ orchestration: refreshAll() → critical path + onIdle() │ │ │ └─────────────────────────────────────────────────────────────┘ │ └────────────┬────────────────────────────────────────────────────────┘ │ ┌─────────┼────────────────────────────────────────────┐ ▼ ▼ ▼ [CORS-OK] [Same-origin snapshots] [Proxy chain] NVD, EPSS, /data/kev.json 1. /.netlify/functions/proxy (whitelisted hosts) CIRCL /data/feodo.json 2. api.allorigins.win/raw /data/urlhaus.json 3. corsproxy.io /data/threatfox.json 4. api.codetabs.com/v1/proxy /data/breaches.json (refreshed by update-data.sh) ``` 本站在**运行时刻意保持零依赖**,仅引入了三个带有 SRI 哈希的 CDN 托管库: - **Chart.js 4.4.1** — 所有图表 - **Leaflet 1.9.4** — 全球威胁地图 - **Google Fonts**(Inter + JetBrains Mono)— 排版 没有 npm install 步骤,没有打包工具,也没有框架。`js/app.js` 是一个独立的 IIFE。 ## 工作原理 — 请求流程 当页面加载时,会运行 `init()`: 1. 设置年份 + 一个随机构建 ID。 2. 连接基于 IntersectionObserver 的滚动显示动画。 3. 启动 UTC 时钟。 4. 渲染 OSINT 卡片(同步执行,来自 `CONFIG.OSINT_ACCOUNTS`)。 5. 绑定事件(筛选器、搜索、刷新按钮、IOC 查询、星标切换)。 6. 调用 `refreshAll()`。 7. 安排 `refreshAll()` 每 15 分钟重新运行一次。 `refreshAll()` 是核心调度器: ``` // 1. Hydrate from localStorage cache (instant first paint) ['cves','kev','news','exploits','urlhaus','threatfox','feodo','breach'] .forEach(k => { const c = cache.get(k); if (c) STATE[k] = c; }); // 2. Re-render everything we have cached // 3. Critical path (above-the-fold): KEV + Feodo + CVE in parallel const critical = Promise.all([refreshKEV(), refreshFeodo(), refreshCVE()]); // 4. Below-the-fold deferred to requestIdleCallback onIdle(() => { refreshNews(); refreshExploits(); refreshURLhaus(); refreshThreatFox(); refreshBreaches(); }); ``` 每个 `fetchXxx()` 都遵循三级回退机制(`tryLocalThenRemote()`): 1. **本地快照**(`data/*.json`)— 同源,无 CORS 问题,始终有效。 2. **直接请求远程** — 适用于对 CORS 友好的 endpoint(NVD、EPSS、CIRCL)。 3. **代理链**(`proxyFetch`)— 先尝试 Netlify 函数,然后依次尝试三个公开的 CORS 代理。 每次获取都通过 `timedFetch()` 进行包装,设置了 20 秒的 AbortController 超时时间,并且每个成功的响应都会被写入 `localStorage`,TTL(生存时间)为 30 分钟。诊断面板(快捷工具中的“显示诊断”按钮)显示每个订阅源的状态胶囊、来源(“实时” / “本地快照” / “实时(通过代理)” / “已缓存”)以及距上次更新的时间。 ### 活跃漏洞利用追踪器评分 `buildExploitList()` 将 KEV 目录与来自 CVE 源的 EPSS 分数相结合,并计算每个漏洞的优先级分数: ``` score = 0 if knownRansomwareCampaignUse === "Known" → score += 100 if dueDate is past → score += 60 if dateAdded within last 30 days → score += 40 if EPSS >= 0.5 → score += 30 + round(epss * 30) score += max(0, 30 - ageDays) // freshness boost ``` 卡片按降序排序,并带有触发的标签标记(🦠 勒索软件,⏰ 逾期,🆕 新鲜,📈 EPSS%)。顶部的四个摘要卡片计算每个桶中的项目数量。 ### 全球威胁地图 基于 Leaflet 和 CARTO 深色无标签切片集构建。`COUNTRY_CENTROIDS` 表将 ISO-2 国家代码映射到 `[lat, lon]` 质心。对于每个有活跃 C2 的国家: - 分层放置一个脉冲式的 `divIcon` 以提供视觉心跳效果(CSS 动画,大小由 `sqrt(count)` 决定)。 - 一个可点击的 `circleMarker` 在其弹窗中显示数量、顶级恶意软件家族和 ASN 样本。 - “实时攻击源”侧边栏(`curvedPath()`)绘制从随机起点到 C2 endpoint 的动画弯曲贝塞尔弧线,并将每个事件前置添加到源中。 ### IOC 信誉查询 `IOC.detect()` 是一个正则表达式交换机,用于对输入进行分类: ``` ^[a-f0-9]{32}$ → md5 ^[a-f0-9]{40}$ → sha1 ^[a-f0-9]{64}$ → sha256 ^\d{1,3}(\.\d{1,3}){3}$ → ipv4 ^[a-fA-F0-9:]+$ with ":" → ipv6 ^https?:// → url ^[\w.-]+\.[a-z]{2,}$ → domain ^CVE-\d{4}-\d{4,}$ → cve ``` 然后 `IOC.lookup()`: - 对于 CVE:直接访问 CIRCL CVE-Search(对 CORS 友好)。 - 对于其他所有内容:交叉引用内存中已加载的 URLhaus / ThreatFox / Feodo 数组(零成本本地匹配),然后通过 Netlify 代理向 URLhaus 主机 endpoint 发出实时的 POST 请求。 - 渲染一个判定卡片,以及指向 AbuseIPDB、VirusTotal、Shodan、OTX、urlscan.io、MalwareBazaar 等的快捷交叉检查链接。 ## 文件结构(每个文件的作用) ``` threat-intel-site/ ├── index.html # Single-page HTML shell ├── css/ │ └── style.css # ~1500 lines of dark-mode UI (CSS vars, no framework) ├── js/ │ └── app.js # ~1670 lines — all logic, all rendering ├── data/ # Same-origin JSON snapshots (CORS bypass) │ ├── kev.json # CISA KEV catalog (~1.5 MB) │ ├── feodo.json # Feodo Tracker C2 list (~2 KB) │ ├── threatfox.json # Recent ThreatFox IOCs (~2 MB) │ ├── urlhaus.json # Recent URLhaus URLs (~70 KB) │ └── breaches.json # XposedOrNot breach catalog (~575 KB) ├── netlify/ │ └── functions/ │ └── proxy.js # Whitelisted CORS proxy (Netlify function) ├── netlify.toml # Netlify build + headers + cache rules ├── _redirects # SPA fallback (/* → /index.html 200) ├── update-data.sh # Cron-able script to refresh data/*.json └── README.md # You are here ``` ### `index.html` HTML 外壳。约 420 行。定义了所有部分以及随后由 `js/app.js` 填充的每个空容器: - `
` 顶栏 — 品牌、全局搜索输入框、锚点导航、UTC 时钟、**全部刷新**、**⬇ JSON** 按钮。 - `
` — 标题、标签胶囊、CTA 按钮、8 项数据条。 - `
` — 活跃漏洞利用追踪器,包含摘要卡片、筛选标签、网格和 3 个图表。 - `
` — Leaflet 容器、顶部攻击来源侧边栏、实时攻击源。 - `
` — IOC 查询表单、诊断面板。 - `
` — 5 个图表 canvas。 - `
` — KEV 表格。 - `
` — CVE 卡片网格 + 严重程度/产品筛选器。 - `
` — URLhaus 网格。 - `
` — Feodo Tracker 表格。 - `
` — 数据泄露网格。 - `
` — 新闻网格。 - `
` — 漏洞利用源网格。 - `
` — OSINT 目录网格(从 `CONFIG.OSINT_ACCOUNTS` 填充)。 - `
` — 每个数据源的归属列表。 - `
` — 带有水印的三列页脚。 CDN 依赖项在加载时使用了 SRI 完整性哈希和 `defer` 属性。 ### `css/style.css` 单文件深色主题(约 45 KB)。使用 CSS 自定义属性作为调色板: ``` --bg: #0b0d10; --panel: #12161c; --border: #232a33; --text: #e6edf3; --text-dim: #9da7b3; --accent: #3fb950; /* green */ --accent-2: #58a6ff; /* blue */ --critical: #f85149; --high: #fb8500; --medium: #d4a72c; --low: #58a6ff; --font-sans: 'Inter'; --font-mono: 'JetBrains Mono'; ``` 包含部分显示动画、状态胶囊样式、严重性颜色编码、Chart.js 深色主题覆盖、Leaflet 弹窗覆盖、脉冲式 C2 标记、卡片错开淡入效果、Hero 渐变效果以及响应式断点。 ### `js/app.js` 核心大脑。组织为标记清晰的部分: | 部分 | 职责 | |---|---| | `CONFIG` | 所有 URL、RSS 订阅源列表、OSINT 账户、刷新间隔、缓存 TTL、获取超时时间 | | `timedFetch` / `proxyFetch` | 带有 AbortController 超时的获取;带有 HTML 错误检测的代理链 | | `cache` | localStorage stale-while-revalidate,30 分钟 TTL,命名空间为 `vni:*` | | `parseRss` | 基于 DOMParser 的 RSS 2.0 + Atom 解析器 | | `STATUS` / `setStatus` / `renderDiagnostic` | 每个订阅源的实时状态胶囊 + 诊断面板 | | `startClock` | UTC 时钟,在标签页隐藏时暂停 | | NVD CVE | `fetchCVEs`、`extractProducts`(CPE 2.3 解析)、`enrichEPSS`、`renderCVEs` | | CISA KEV | `tryLocalThenRemote`、`fetchKEV`、`renderKEV` | | RSS 聚合器 | `fetchRssSet`、`renderNews`、`renderExploits` | | Abuse.ch | `fetchURLhaus`、`fetchThreatFox`、`fetchFeodo` + 渲染器 | | 数据泄露 | `fetchBreaches`、`renderBreaches` | | IOC 查询 | `IOC.detect`、`IOC.lookup`、`renderIocResult` | | OSINT | `renderOsint` | | 收藏 | `getStars`、`isStarred`、`toggleStar`(localStorage 收藏) | | 图表 | `drawSeverity`、`drawKevTime`、`drawVendor`、`drawMalwareFamilies`、`drawC2Geo`、`drawExploitTimeline`、`drawExploitProducts`、`drawEpssTop` | | 活跃漏洞利用 | `buildExploitList`、`renderExploitSummary`、`renderExploitList` | | 威胁地图 | `ensureMap`、`renderThreatMap`、`renderTopCountries`、攻击源动画、`curvedPath` 贝塞尔辅助函数、`COUNTRY_CENTROIDS` 查找 | | `countUp` | 数字过渡动画(三次方缓出,700ms) | | `initRevealObserver` | IntersectionObserver 滚动显示 | | `updateStats` | Hero 数据条计数器 | | `globalSearch` | 跨数据源搜索(CVE/KEV/新闻/漏洞利用) | | `exportAll` | 将内存中的 `STATE` 作为 Blob 下载 | | `STATE` + 调度 | `refreshCVE`、`refreshKEV`、`refreshNews`、`refreshExploits`、`refreshURLhaus`、`refreshThreatFox`、`refreshFeodo`、`refreshBreaches`、`refreshAll` | | `wireEvents` | 所有监听器(筛选输入、刷新按钮、IOC 表单、诊断开关) | | `init` | 入口点 | ### `data/*.json` 同源捆绑的 abuse.ch + CISA + XposedOrNot 订阅源快照。为什么?因为: - 这些主机并不全提供 CORS 标头。 - Netlify 函数和公共代理只能尽力而为 —— abuse.ch 经常对它们进行速率限制或封锁。 - 从 `/data/` 加载速度很快(通过 `netlify.toml` 进行 Cloudflare CDN 缓存),并且永远不会因为 CORS 原因而失败。 这些文件由 `update-data.sh` 刷新 —— 可以手动运行、通过 cron 运行,或者作为 Netlify 构建过程的一部分运行(`command = "./update-data.sh"`)。 ### `netlify/functions/proxy.js` Serverless 函数,从**主机名白名单**中获取任意 URL,并返回带有 `Access-Control-Allow-Origin: *` 的正文。同时支持 GET 和 POST(以便 IOC 查询可以向 URLhaus 的主机 API 发送 POST 请求)。白名单包括:`cisa.gov`、`cert-in.org.in`、`nvd.nist.gov`、`cve.circl.lu`、所有 `*.abuse.ch`(URLhaus / ThreatFox / Feodo / Bazaar)、`otx.alienvault.com`、`api.first.org`、`api.xposedornot.com`、`haveibeenpwned.com`,以及所有 RSS 主机(Krebs、Bleeping、FeedBurner、SANS、Dark Reading、Register、Schneier、Threatpost、Exploit-DB、PacketStorm、GitHub)。 向上游标识自身为 `User-Agent: VENOM-INTEL/1.0`。 ### `netlify.toml` - `publish = "."` — 从仓库根目录提供服务 - `functions = "netlify/functions"` — 发现代理 - 每个路由的安全标头:`X-Frame-Options: SAMEORIGIN`、`X-Content-Type-Options: nosniff`、`Referrer-Policy: strict-origin-when-cross-origin`、`Permissions-Policy: geolocation=(), microphone=(), camera=()` - 缓存规则:`css/*` 和 `js/*` → 1 天 + 7 天 SWR;`data/*.json` → 15 分钟 + 1 小时 SWR;函数 → 5 分钟 + 始终允许 CORS - 函数的 `node_bundler = "esbuild"` ### `_redirects` ``` /* /index.html 200 ``` SPA 风格的回退,因此像 `/#kev` 这样的锚点链接总能被解析。 ### `update-data.sh` 对 cron 友好的 bash 脚本,执行以下操作: 1. 使用 `--max-time 90 --http1.1` cURL 每个远程订阅源。 2. 在替换文件之前,使用 `python3 -c "import json; json.load(...)"` 验证 JSON(通过 `.tmp` 重命名进行原子操作)。 3. 如果验证失败 —— 这在 URLhaus 的流截断中很常见 —— 运行**挽救过程**,按 `],` 分割,尝试解析每批数据,并重建最大的有效前缀。 4. 报告每个订阅源的 `✓` / `✗` 及其字节计数。 运行方式如下: ``` ./update-data.sh # ▸ 正在刷新本地 threat-intel 快照... # KEV ✓ 1484848 字节 # Feodo ✓ 1763 字节 # ThreatFox ✓ 2044024 字节 # URLhaus ✓ 71307 字节 # Breaches ✓ 574991 字节 # ▸ 完成。5 成功 / 0 失败。 ``` ## 本地预览 最简单的方式: ``` cd threat-intel-site python3 -m http.server 8080 # → http://localhost:8080 ``` 你也可以直接使用 `file://` 打开 `index.html`,但是 RSS 订阅源无法加载,因为公共 CORS 代理会拒绝 `Origin: null`。为了获得完整功能,请通过 HTTP 提供服务。 Netlify 代理函数无法在 `python3 -m http.server` 中运行 —— 这没关系,代码会回退到 `allorigins.win` / `corsproxy.io` / `codetabs.com`。 ## 刷新本地快照 `data/*.json` 快照保证了即使实时代理被阻止,仪表盘也能正常工作。 ``` ./update-data.sh ``` 为了实现持续保持最新状态的部署,请对其进行调度(cron、GitHub Actions、Netlify build hook): ``` # 每 30 分钟刷新一次 */30 * * * * cd /path/to/threat-intel-site && ./update-data.sh ``` 或者将其添加到你的 Netlify 构建中: ``` # netlify.toml [build] publish = "." functions = "netlify/functions" command = "./update-data.sh" ``` ……并通过预定的 Netlify build hook 触发定期的重新构建。 ## 部署到 Netlify ### 选项 A — 拖放 1. 压缩 `threat-intel-site/` 文件夹。 2. 访问 https://app.netlify.com/drop 并拖放该 zip 文件。 3. 完成。 ### 选项 B — Git 1. 将此文件夹推送到 GitHub 仓库。 2. 在 Netlify 上:**Add new site → Import from Git → 选择仓库**。 3. 构建设置从 `netlify.toml` 自动检测: - publish 目录:`.` - functions 目录:`netlify/functions` 4. 部署。 ### 选项 C — CLI ``` npm i -g netlify-cli cd threat-intel-site netlify deploy --prod ``` 部署后,代理将位于 `/.netlify/functions/proxy?url=`。 ## CORS 的处理方式 分为三层,按请求顺序依次尝试: 1. **直接获取** — 适用于 NVD、CISA KEV、FIRST EPSS、CIRCL CVE-Search。 2. **同源快照**(`/data/*.json`)— 始终有效;由 `update-data.sh` 刷新。 3. **代理链**(`proxyFetch`): - `/.netlify/functions/proxy?url=...`(你自己的白名单代理) - `api.allorigins.win/raw?url=...` - `corsproxy.io/?...` - `api.codetabs.com/v1/proxy/?quest=...` 该链会检测 HTML 错误页面(`` 和 `
` 中。 ## 隐私与法律声明 - **无追踪。** 没有分析,没有遥测,没有第三方指纹收集。唯一的对外请求是发往公开记录的 API 以及(可选的)代理链。 - **无登录,无 Cookie。** 唯一的持久化存储是用于缓存和加星 CVE 的 `localStorage`。 - **无抓取。** 所有数据均从记录在案的、旨在用于聚合的公开 API 和 RSS 订阅源中获取。 - **保留归属。** 每个部分都链接回原始来源,并且*关于*部分列出了每个 API 及其鸣谢。 - 数据是在合理使用研究条款下汇总的。CISA KEV、NVD、FIRST EPSS 是开放的政府/社区数据集。abuse.ch 和 XposedOrNot 提供公开的 JSON endpoint。RSS 从定义上讲就是为公共重新分发而设计的。 - 所有商标均归其各自所有者所有。 ## 技术栈 - **HTML5** — 单页外壳,无引擎 - **CSS3** — 自定义属性、grid、flex、CSS 动画(无 Tailwind,无 Bootstrap) - **原生 ES2020 JavaScript** — 单个 IIFE,无框架,无打包工具,无转译 - **Chart.js 4.4.1** — 条形 / 甜甜圈图 - **Leaflet 1.9.4** — 全球威胁地图(CARTO 深色切片) - **Netlify Functions** — Node.js 白名单 CORS 代理 - **Bash + curl + python3** — `update-data.sh` 快照刷新工具 构建 & 签名:**CYbErXV3nOm**
标签:ESC4, OSINT, 多模态安全, 威胁情报, 安全仪表盘, 开发者工具, 数据可视化, 漏洞追踪, 静态网站