aksharahegde/threatpkg

GitHub: aksharahegde/threatpkg

ThreatPkg 是一个开源软件供应链威胁情报实时仪表盘,聚合多生态的恶意包事件、安全公告与依赖扫描能力,帮助开发者及时发现和应对依赖风险。

Stars: 0 | Forks: 0

# ThreatPkg 面向开源包威胁情报的公开实时仪表盘,涵盖 **npm**、**PyPI**、**Go**、**crates.io**、**Maven**、**NuGet**、**RubyGems**、**Packagist (PHP/Laravel)** 和 **Pub (Dart/Flutter)** —— 将被入侵的包、供应链事件以及安全公告 ID(CVE、GHSA、OSV)汇聚于一个可搜索的信息流中。 ## 功能 - **实时威胁信息流** — 按 ecosystem、严重程度、威胁类型、来源和时间范围进行过滤;支持分页和自动刷新 - **三栏式仪表盘** — 关键指标、ecosystem 分布、趋势图表、信息流列表和详情检查面板 - **包查询** — 从导航栏搜索包;自动解析至正确的 ecosystem 路由 - **事件详情** — Markdown 公告、时间线、指标、受影响版本及相关事件 - **包页面** — 每个包的信誉评分和事件历史 - **依赖扫描** — 上传 lock 文件或 manifest;根据恶意软件事件检查固定版本(本地索引 + 实时 OSV) - **浅色 / 深色主题** — 跟随系统偏好并支持手动切换(持久化存储于 local storage 中) ## 技术栈 - [Nuxt 4](https://nuxt.com) SSR + Nitro - [Nuxt UI](https://ui.nuxt.com) + Tailwind CSS - PostgreSQL + [Drizzle ORM](https://orm.drizzle.team) - [Bun](https://bun.sh) 包管理器 - [Vitest](https://vitest.dev) 用于单元测试 ## 设置 ``` bun install cp .env.example .env ``` 将 `DATABASE_URL` 设置为你的 Postgres 连接字符串,然后执行: ``` bun run db:migrate bun run db:seed bun run db:sync bun run dev ``` 打开 [http://localhost:3000](http://localhost:3000)。 所有 API 路由都需要 `DATABASE_URL`。如果未同步数据,信息流在 seed 后将为空(seed 仅注册来源)。 ## 环境变量 | 变量 | 必需 | 描述 | |----------|----------|-------------| | `DATABASE_URL` | 是 | PostgreSQL 连接字符串 | | `NUXT_PUBLIC_SITE_URL` | 否 | 用于 SEO / OG 的规范站点 URL(默认为 `http://localhost:3000`)。在 Vercel 上,请将其设置为你的**自定义域名**(例如 `https://tpkg.akshara.dev`),而不是 `*.vercel.app` URL —— 否则 `og:image` 和社交预览将使用错误的主机。 | | `GITHUB_TOKEN` | 否 | 在同步期间提高 GitHub Advisory API 的速率限制 | | `SYNC_SECRET` | 用于手动同步 | 启用 `POST /api/sync` 所需(作为 `x-sync-secret` 请求头发送) | | `CRON_SECRET` | 用于 Vercel Cron | 在 Vercel 上设置;授权 `GET /api/cron/sync`(自动发送 Bearer token) | | `REDIS_URL` | 否 | 预留以备将来使用 | | `OPENAI_API_KEY` | 否 | 预留用于 AI 摘要增强 | ## 脚本 | 脚本 | 描述 | |--------|-------------| | `bun run dev` | 开发服务器 | | `bun run build` | 生产环境构建 | | `bun run preview` | 预览生产环境构建 | | `bun run typecheck` | Nuxt TypeScript 检查 | | `bun run test` | 运行 Vitest 单元测试 | | `bun run db:generate` | 生成 Drizzle migrations | | `bun run db:migrate` | 应用 migrations | | `bun run db:seed` | 填充 source registry | | `bun run db:sync` | 从 OSV 和 GitHub Advisories 获取事件 | 定时获取:本地通过 Nitro `sync-all` 任务每 30 分钟运行一次;在 Vercel 上通过 [Cron Jobs](https://vercel.com/docs/cron-jobs)(`GET /api/cron/sync`,Hobby 计划为 UTC 时间每天 06:00 — 在 Pro 计划的 `vercel.json` 中使用 `*/30 * * * *`)。 ## 数据来源 | 来源 | 类型 | 备注 | |--------|------|-------| | OSV | API | 每个 ecosystem 最近的漏洞和恶意软件(modified-id 列表) | | GitHub Advisories | API | 可选的 `GITHUB_TOKEN` 以获得更高的速率限制 | ## 路由 | 路径 | 描述 | |------|-------------| | `/` | 实时威胁信息流 | | `/incident/[id]` | 事件详情 | | `/package/[ecosystem]/[name]` | 包信誉(`npm`、`pypi`、`go`、`crates`、`maven`、`nuget`、`rubygems`、`packagist`、`pub`) | | `/package/[name]` | 重定向至 ecosystem 范围的 URL | | `/about` | 关于本项目 | ## API | Endpoint | 描述 | |----------|-------------| | `GET /api/feed` | 分页事件 + 摘要 + 趋势 buckets | | `GET /api/incidents/:id` | 完整事件详情 | | `GET /api/packages/:ecosystem/:name` | 包信誉 + 历史 | | `GET /api/packages/resolve/:name` | 将包名称解析至主要 ecosystem | | `GET /api/sources` | 同步新鲜度 / 来源状态 | | `POST /api/sync` | 触发获取(在设置 `SYNC_SECRET` 前处于禁用状态;需要 `x-sync-secret` 请求头) | | `GET /api/cron/sync` | Cron 获取(Vercel 发送 `Authorization: Bearer `;也可接受 `SYNC_SECRET`) | `/api/feed` 的查询参数:`ecosystem`、`severity`、`threatType`、`source`、`range`(`24h` \| `7d` \| `30d`)、`q`、`sort`(`published` \| `risk`)、`cursor`、`limit`。 API 路由受速率限制(每个客户端 IP 每分钟 120 次请求),并且响应包含标准安全标头(CSP、`X-Frame-Options` 等)。 ## 规格说明 产品和数据模型:[../threat_pkg.md](../threat_pkg.md)
标签:Nuxt, XSS, 威胁情报, 开发者工具, 文档安全, 测试用例, 漏洞情报, 自动化攻击