shivi-cyber/blockchain-based-cybersecurity-threat-intelligence
GitHub: shivi-cyber/blockchain-based-cybersecurity-threat-intelligence
基于以太坊智能合约和 IPFS 的去中心化威胁情报共享原型系统,用于教学演示多组织间安全可信地共享结构化威胁数据。
Stars: 0 | Forks: 0
# 基于区块链的网络安全威胁情报共享(原型)
端到端的**教育**演示:组织共享结构化的威胁数据;**IPFS** 存储完整报告;**Ethereum (Solidity)** 锚定 **Keccak256** 哈希和 CID;**Flask** 提供受 JWT 保护的 REST API;**原生 JS** 仪表板可以列出、过滤和验证报告。
## 快速架构说明
- **前端:** `frontend/` — HTML/CSS/JS,Chart.js 图表。
- **后端:** `backend/` — Flask, SQLAlchemy, JWT, RBAC, Web3, IPFS 客户端。
- **区块链:** `blockchain/` — Hardhat + `ThreatIntelligence.sol`。
- **数据库:** 默认为 SQLite,或通过 `DATABASE_URL` 使用 PostgreSQL。
- **IPFS:** 可选的 Docker 服务或本地 Kubo;离线时回退到 CID。
- **文档:** `docs/ARCHITECTURE.md`,`docs/EXAMPLE_DATA.json`。
## 前置条件
- **Python 3.10+**(当前依赖项在 3.9 上可能也能运行)。
- **Node.js 18+** 和 **npm**(用于 Hardhat)。
- 可选:**Docker**(通过 `docker-compose.yml` 启动 PostgreSQL + IPFS)。
## 分步设置(本地)
### 1. 区块链:编译并运行节点
```
cd blockchain
npm install
npx hardhat compile
```
在 **终端 A** 中,启动带有持久化链的 Hardhat:
```
npx hardhat node
```
保持其运行。记下 **Hardhat 账户 #0** 的私钥(在后端用作管理员):
`0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80`(仅限本地使用——切勿在主网上使用)。
### 2. 部署合约
```
cd blockchain
npx hardhat run scripts/deploy.js --network localhost
```
将合约地址复制到 `backend/.env` 中(见下文)。
### 3. 后端配置
```
cd backend
py -m venv .venv
.venv\Scripts\activate # Windows
# source .venv/bin/activate # Linux/macOS
pip install -r requirements.txt
copy .env.example .env # Windows; or cp on Unix
```
编辑 `backend/.env`:
- 将 `CONTRACT_ADDRESS` 设置为已部署的地址。
- 将 `ADMIN_PRIVATE_KEY` 设置为上面提到的 Hardhat #0 密钥(本地开发)。
- 可选:`BOOTSTRAP_ADMIN_USERNAME` / `BOOTSTRAP_ADMIN_PASSWORD` 用于管理员登录。
### 4. 可选:PostgreSQL + IPFS (Docker)
在项目根目录下运行:
```
docker compose up -d
```
在 `backend/.env` 中:
```
DATABASE_URL=postgresql+psycopg2://threat:threat_dev@127.0.0.1:5432/threat_intel
IPFS_API=/ip4/127.0.0.1/tcp/5001
```
如果您跳过 Docker,应用程序将使用位于 `database/threat_intel.db` 的 **SQLite** 以及 IPFS **回退** CID。
### 5. 运行 API + 仪表板
```
cd backend
py app.py
```
打开 **http://127.0.0.1:5000/** — Flask 将提供 `frontend/` 静态文件服务。
### 6. HTTPS(生产环境)
在 **nginx**、**Caddy** 或云负载均衡器处终止 TLS;代理到位于 `127.0.0.1:5000` 的 Flask。应用程序设置了基本的安全响应头;请在代理中启用 HSTS 和真正的证书。
## REST API(摘要)
| 方法 | 路径 | 认证 | 描述 |
|--------|------|------|-------------|
| POST | `/api/register` | — | 注册分析师或组织(组织会获得一个钱包;管理员将其注册到链上)。 |
| POST | `/api/login` | — | JWT 登录。 |
| POST | `/api/submitThreat` | JWT | 组织或管理员;存储到 IPFS + DB;组织签署链上交易。 |
| GET | `/api/getThreats` | JWT | 列出威胁;支持 `?attack_type=` 过滤器。 |
| POST | `/api/verifyThreat` | JWT | `{ "report_hash": "0x..." }` — 链 + 数据库检查。 |
| GET | `/api/stats` | JWT | 计数,攻击类型明细,最近的记录。 |
| GET | `/api/chainThreats` | JWT | 原始的链上锚点数据。 |
## 角色
- **organization** — 可以提交;后端生成一个 Ethereum 密钥,将其注册到链上,通过 Hardhat 管理员为其提供资金,并签署 `addThreatReport`。
- **analyst** — 只读 API 使用(列表、统计、验证)。
- **admin** — 通过环境变量引导;可以提交数据库记录(对于组织流程,链上交易是可选的)。
## 示例测试数据
参见 `docs/EXAMPLE_DATA.json`。在注册 **organization** 用户并登录后,使用相同的结构向 `/api/submitThreat` 发送 POST JSON 请求。
## 安全性(原型限制)
- 演示密钥和已知的 Hardhat 账户**绝不**得在公共网络上使用。
- 如果您需要机密性,请单独加密敏感的 IPFS 负载。
- 在任何共享部署中轮换 JWT 密钥并使用强密码。
## 项目布局
```
BlockchainProject/
├── frontend/ # Web UI
├── backend/ # Flask API
├── blockchain/ # Hardhat + Solidity
├── database/ # schema.sql + SQLite file (generated)
├── ipfs/ # IPFS notes
├── docs/ # Architecture + examples
├── docker-compose.yml
└── README.md
```
## 许可证
仅限教育用途。示例代码采用 MIT 许可证,除非您添加了自己的策略。
标签:API安全, Chart.js, CMS安全, Docker, Flask, Hardhat, IPFS, JavaScript, JSON输出, JWT, Keccak256, MITM代理, PostgreSQL, Python, RBAC, REST API, Solidity, SQLAlchemy, SQLite, Web3, Web3开发, 以太坊, 信息共享, 前端, 区块链, 原型系统, 去中心化, 哈希验证, 威胁情报, 威胁情报共享, 安全防御评估, 开发者工具, 教学演示, 数据共享, 无后门, 星际文件系统, 智能合约, 测试用例, 网络安全, 网络安全教育, 请求拦截, 逆向工具, 隐私保护