ZoraizAzeem786/Threat-Intelligence-Portal
GitHub: ZoraizAzeem786/Threat-Intelligence-Portal
一个基于 Flask 的轻量级威胁情报查询门户,聚合多个公开 OSINT 数据源并提供本地缓存以加速 IOC 查询。
Stars: 0 | Forks: 0
# 威胁情报门户
一个轻量级的 Flask 应用,允许分析师查询 **IP / 域名 / 哈希 / CVE / 威胁行为者** 指标,并即时查看公开来源情报(AlienVault OTX、NIST NVD、MITRE ATT&CK)。
## ✨ 功能
- **实时查询** 按钮 —— 强制发起一次新的 API 请求,绕过 SQLite 缓存。
- **缓存层** —— 结果存储在 `data/cache.db` 中,并带有 TTL(IP/域名为 6 小时,哈希/CVE 为 24 小时,行为者为 6 小时)。
- **历史记录面板** —— 显示最近的查询及其时间戳。
- **响应式 UI** —— 原生 HTML/CSS + 现代化的 Google Fonts,为状态徽标添加了微交互动画。
- **可扩展的后端** —— 易于添加更多数据源(例如 VirusTotal、Shodan)。
## 📦 安装
```
# 克隆 / 复制仓库
cd threat_intel_portal
# 创建虚拟环境 (Windows)
python -m venv venv
venv\Scripts\activate
# 安装依赖项 (Flask + 其他 libs)
pip install -r requirements.txt
```
根据示例创建一个 `.env` 文件并添加你的密钥:
```
# .env
OTX_API_KEY=YOUR_OTX_KEY # required for IP/domain/hash look‑ups
```
## ▶️ 运行应用
```
python app.py
```
在浏览器中打开 **http://127.0.0.1:5000**。
- **运行查询** —— 如果存在新的缓存记录,则使用缓存。
- **实时查询** —— 点击 **Run lookup** 旁边的 **Live lookup** 按钮,强制发起一次实时请求。
这两个按钮都会在结果下方显示一个徽标:
* 🟢 `live` —— 刚刚获取的数据。
* 🟠 `from cache` —— 从 SQLite 存储中提供的数据,并附带获取时间戳。
## 🌐 API 端点
| 端点 | 方法 | 描述 |
|----------|--------|-------------|
| `/api/search?q=` | GET | 检测 IOC 类型,返回缓存数据或新获取的数据。添加 `&refresh=1` 可跳过缓存(由 **Live lookup** 使用)。 |
| `/api/history?limit=25` | GET | 返回最近的缓存查询(值、类型、来源、时间戳)。由历史侧边面板使用。 |
所有响应均为 JSON 对象,其中包含一个内部的 `_cache` 字段,用于指示命中状态和获取时间。
## 🗄️ 缓存详情
- **位置:** `data/cache.db` (SQLite)。
- **Schema:** `lookups(ioc_type TEXT, value TEXT, source TEXT, payload TEXT, fetched_at REAL, PRIMARY KEY(ioc_type, value, source))`。
- **TTL 值(在 `app.py` 中定义):**
TTL_SECONDS = {
"ip": 6 * 3600,
"domain": 6 * 3600,
"hash": 24 * 3600,
"cve": 24 * 3600,
"actor": 6 * 3600,
}
- 缓存会根据 TTL 自动清理;在查询时会忽略过期行。
## 🎨 前端说明
- **HTML** (`templates/index.html`) —— 极简的标记,使用了 Google Fonts *IBM Plex Sans* / *IBM Plex Mono*。
- **CSS** (`static/style.css`) —— 支持暗色模式,采用毛玻璃拟态卡片样式和细微的悬停效果。
- **JS** (`static/app.js`) —— 处理表单提交、“Live lookup” 点击事件,并通过渲染函数(`renderOTX`、`renderCVE`、`renderActor`)渲染结果。
- **徽标渲染** 由 `cachePill(data)` 完成,它会添加“live / from cache”药丸状标签。
## 🛠️ 扩展门户
1. **添加新来源** —— 创建一个 `services/_client.py`,其中包含一个 `fetch(ioc_type, value, api_key)` 函数,然后在 `app.py` 中导入并为其设置路由。
2. **调整 TTL** —— 修改 `app.py` 中的 `TTL_SECONDS`。
3. **自定义 UI** —— 编辑 `static/style.css` 或替换 Google Font 链接。
## 📜 许可证
MIT —— 欢迎自由 fork、修改和重用。
*祝狩猎愉快!*
标签:Flask, SQLite, 多模态安全, 威胁情报, 安全运营, 开发者工具, 情报查询, 扫描框架, 数据可视化, 逆向工具