raphaelmpr-beep/skysignal

GitHub: raphaelmpr-beep/skysignal

SkySignal 是一个多租户无人机威胁情报平台,通过 OSINT 数据整合与七因子评分算法,为安全专业人员提供设施级无人机威胁量化评估与可视化报告。

Stars: 0 | Forks: 0

# SkySignal — 无人机威胁情报平台 ## 什么是 SkySignal? SkySignal 是一个多租户 SaaS 平台,旨在帮助安全专业人员评估特定设施、地址或地理区域周围的无人机威胁究竟有多真实。它接入 OSINT 和官方来源数据,将事件可视化在地图上,使用 7 因子算法对可信度进行评分,并生成无人机威胁现实评分报告(0–100)。 **合规范围:** 仅限态势感知、OSINT 分析、地图映射和报告。 本平台不包含,且绝不能包含无人机拦截、干扰、开发利用、武器化、目标锁定或反制措施执行功能。 ## 快速开始(本地开发 — 3 条命令) ### 前置条件 - Docker Desktop 及 Docker Compose v2 - Node.js 20+(用于本地 Web 开发) - Python 3.11+(用于本地 API 开发) ### 选项 A:Full Docker(推荐) ``` git clone skysignal cd skysignal cp .env.example .env docker compose up --build ``` 然后打开:http://localhost:3000 ### 选项 B:本地开发(迭代更快) ``` # Terminal 1: 仅 Database docker compose up db # Terminal 2: FastAPI cd apps/api python -m venv .venv && source .venv/bin/activate pip install -r requirements.txt cp ../../.env.example .env uvicorn main:app --reload --port 8000 # Terminal 3: Next.js cd apps/web npm install cp ../../.env.example .env.local npm run dev ``` ### 填充数据库 ``` cd packages/database python seed/seed.py ``` 或通过 Docker: ``` docker compose exec api python /app/seed.py ``` ## 默认凭据 | 邮箱 | 密码 | 角色 | |---|---|---| | admin@skysignal.dev | demo1234 | 组织管理员 | 或者使用登录页面上的 **Dev Login** 按钮(仅在 `SKIP_AUTH=true` 时可用)。 ## 主要用户工作流 1. 在 http://localhost:3000/login 登录 2. Dashboard 显示 25 条种子事件和 KPI 卡片 3. 点击 **Assess Location** → 输入地址 → 选择半径 + 时间窗口 → **Run Assessment** 4. 查看威胁现实评分(0–100)及其完整的因子明细 5. 保存为 Watch Zone,生成 PDF 报告 6. 导航至 **Map** 查看带热力图的完整 COP 视图 7. **Admin → Review Queue** 显示 PENDING 的候选事件 ## 架构 ``` apps/ web/ Next.js 14 App Router (TypeScript, Tailwind, shadcn/ui) api/ FastAPI (Python 3.11, SQLAlchemy 2.0, PostGIS) packages/ database/ migrations/ PostgreSQL + PostGIS schema migrations seed/ Demo data (25 incidents, 3 watch zones) shared/ types/ TypeScript domain types (shared between web and API clients) constants/ Shared enumerations and scoring constants docker-compose.yml ``` ## 无人机威胁现实评分 这是一个设施级别的 0–100 分数,由 7 个加权因子组成: | 因子 | 权重 | 描述 | |---|---|---| | Evidence Confidence | 30% | 附近事件的平均置信度得分 | | Incident Density | 20% | 半径内对数归一化的事件计数 | | Recency | 15% | 指数衰减加权,近期事件权重更高 | | Facility Proximity | 15% | 事件到设施中心的平均距离 | | Severity | 10% | 按严重程度等级加权的平均值 | | Sector Sensitivity | 5% | CISA 部门关键性乘数 | | Repeat Pattern | 5% | 同一微型区域内的事件聚类 | 评分等级:0–20 Minimal · 21–40 Low · 41–60 Moderate · 61–80 Elevated · 81–100 High ## 数据流水线 ``` Manual SALUTE → PENDING incident → Admin review → APPROVED GDELT/RSS/News → PENDING candidate (LOW confidence) → Official validation → Admin review → APPROVED Official press/FAA → can auto-boost confidence if official_match_score ≥ 80 ``` **数据原则:** 任何 GDELT/RSS/新闻结果都不会自动成为已确认的事件。 所有新闻来源的候选事件都会进入 `review_status=PENDING`、`confidence_tier=UNVERIFIED` 状态。 ## API 端点 Base URL: http://localhost:8000 | 方法 | 路径 | 描述 | |---|---|---| | POST | /api/auth/login | 登录 → JWT | | GET | /api/incidents | 列出带过滤器的事件 | | GET | /api/incidents/{id} | 事件详情 + 证据 | | POST | /api/assessments | 创建设施评估 | | GET | /api/map/incidents | 地图优化的事件点 | | GET | /api/map/heatmap | 热力图权重点 | | GET | /api/analytics/kpi | KPI 仪表板数据 | | GET | /api/analytics/sankey | 来源→类型→部门→结果 流向 | | GET | /api/admin/review-queue | 待审核队列 | | POST | /api/salute | 提交 SALUTE 报告 | 完整的交互式文档:http://localhost:8000/docs(FastAPI 自动生成) ## 环境变量 请参阅 `.env.example` 获取所有变量。关键变量: | 变量 | 描述 | |---|---| | `DATABASE_URL` | PostgreSQL 连接字符串(需要 PostGIS) | | `NEXTAUTH_SECRET` | JWT 签名密钥 — **在生产环境中务必更改!** | | `NEXT_PUBLIC_MAPBOX_TOKEN` | 可选。留空以使用 OpenStreetMap(Leaflet 默认) | | `SKIP_AUTH` | 设为 `"true"` 以在开发环境中绕过验证 — **生产环境中绝不可用** | | `ENABLE_GDELT` | 启用 GDELT 新闻抓取流水线 | | `ENABLE_RSS_IMPORTER` | 启用 RSS/新闻订阅导入器 | ## 部署(MVP 之后) **推荐的生产环境技术栈:** - 数据库:Supabase 或 Neon(带有 PostGIS 的托管型 Postgres) - API:Railway、Render 或 AWS ECS - Web:Vercel(Next.js 原生) - 确保设置 `SKIP_AUTH=false` 并更换 `.env.example` 中的所有默认密钥 ``` # 构建 production images docker compose -f docker-compose.prod.yml up --build ``` ## 添加实时数据源 数据源存根位于 `apps/api/app/services/`: - `gdelt_service.py` — 连接至 GDELT API(端点已在文件中注释说明) - `official_validation_service.py` — 连接至 FAA DroneZone、DOJ 新闻稿 - 在 `.env` 中设置 `ENABLE_GDELT=true` / `ENABLE_RSS_IMPORTER=true` 以启用 ## 安全与合规 本平台仅用于态势感知和 OSINT 分析。 请勿添加,也不要接受包含以下内容的 pull request: - 无人机干扰、拦截或中和逻辑 - 对无人机控制系统的远程访问 - 目标定位系统或火力控制集成 - 任何反制措施执行(仅限报告字段)
标签:AV绕过, ESC4, FastAPI, HTTP/HTTPS抓包, OSINT, SaaS平台, 威胁情报, 开发者工具, 态势感知, 无人机, 测试用例, 版权保护, 自动化攻击, 请求拦截