zer0spin/infosec-digest
GitHub: zer0spin/infosec-digest
一个安全优先的网络安全新闻和播客聚合器,采用 GitOps 静态架构自动聚合多源 RSS 内容。
Stars: 7 | Forks: 1
[](https://infosec-digest.vercel.app)
## [阅读 Português (pt-BR) 版本](README.pt-br.md)
# InfoSec 摘要
**InfoSec Digest** 是一个现代化、安全且高性能的网络安全新闻和播客聚合器。该项目采用解耦的 GitOps 架构构建,以静态方式提供内容以实现最大的安全性和速度,并具有全自动更新功能。
## ✨ 功能特性
- **集中化内容**:聚合来自最相关网络安全源的最新新闻和播客剧集。
- **简洁快速的界面**:使用 HTML、Vanilla JS 和 Pico.css 构建的静态前端,提供轻量级且响应迅速的用户体验。
- **自动更新**:GitHub Actions 工作流每小时获取新内容,确保网站始终保持最新状态。
- **弹性机制**:系统设计旨在容忍单个 RSS 源的故障,而不会中断整体运行。
- **安全至上**:“安全设计”架构,旨在最小化攻击面。
## 🏛️ 架构
该项目采用 GitOps 方法,将数据收集过程与内容交付分离开来。
1. **数据收集 (GitHub Actions)**:
- 计划工作流 (`fetch_news.yml`) 每小时运行一次。
- 该工作流执行 Python 脚本 (`app/fetcher.py`)。
- 该脚本从 `sources.json` 读取新闻源,从每个 RSS 源获取内容,使用 `keywords.json` 对其进行分类,并生成单个静态数据文件 (`public/data.json`)。
- 每个条目都会添加一个 `timestamp_added`,以跟踪其被添加到系统的时间。
2. **内容交付 (静态托管)**:
- `public/` 目录包含一个静态网站 (HTML, CSS, JS)。
- 当 `data.json` 被工作流更新时,提交会触发部署到静态托管服务(如 GitHub Pages、Vercel、Netlify 等)。
- 客户端的 JavaScript (`public/js/main.js`) 获取 `data.json` 并动态渲染界面,通过将所有内容视为文本 (`.textContent`) 来防止 XSS 攻击。
## 🛠️ 工程决策
这些是为了增强项目稳定性和性能而做出的审慎技术选择。
#### 为什么选择 Python 3.11 而不是 3.13?
在自动化工作流中选择 Python 3.11 是一个保守的工程决策,旨在为生产环境 (CI/CD) 实现最大的可靠性。
* **稳定性与成熟度**:3.11 版本久经考验,拥有成熟的库生态系统,并已在其上进行了广泛的验证。
* **生态系统兼容性**:它保证了我们的依赖项(如 `feedparser`)和执行环境 (GitHub Actions runners) 拥有稳定的长期支持。
* **风险与回报**:较新 Python 版本的性能优势对于此 I/O 密集型脚本来说可以忽略不计,因此我们优先考虑稍旧、广泛采用的版本的经过验证的稳定性。
#### 为什么 CSS 内嵌在 HTML 中?
将 CSS 放置在 HTML 的 `