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开发, 以太坊, 信息共享, 前端, 区块链, 原型系统, 去中心化, 哈希验证, 威胁情报, 威胁情报共享, 安全防御评估, 开发者工具, 教学演示, 数据共享, 无后门, 星际文件系统, 智能合约, 测试用例, 网络安全, 网络安全教育, 请求拦截, 逆向工具, 隐私保护