本文目录导读:

编写一个有效的 SECURITY.md 文件是开源项目或任何软件项目的重要实践,它为用户和潜在的安全研究人员提供了明确的指导,告诉他们如何负责任地报告安全漏洞。
以下是一个标准且全面的 SECURITY.md 编写指南,包含模板和最佳实践。
核心目标
- 建立信任:向用户展示你重视安全。
- 提供清晰路径:告诉研究人员如何私下报告漏洞(而不是公开 Issue)。
- 明确承诺:说明你会如何处理、响应以及修复漏洞。
基本结构(推荐模板)
你可以直接复制下面的模板,并根据你的项目实际情况进行修改。
# 安全政策
## 支持的版本
此部分列出了当前正在接收安全更新的版本,只有以下版本会得到安全修复。
| 版本 | 支持情况 |
| ---- | ----------------- |
| 1.x | :white_check_mark: 支持 |
| 1.0.x | :x: 不支持 |
| < 1.0 | :x: 不支持 |
*(请根据你的实际版本支持情况填写,如果是新项目,可以写成 `最新发布版 (Latest Release)`)*
## 报告漏洞
我们重视来自安全社区和用户的贡献,如果你在我们项目中发现了安全漏洞,**请不要在公共的 GitHub Issues 或讨论区中披露**。
请通过以下方式之一向我们发送详细报告:
1. **首选方式:** 发送电子邮件至 **[secure@yourdomain.com](mailto:secure@yourdomain.com)**
2. **备用方式:** 在我们的 [安全公告板](链接到你的安全问题跟踪器,如 HackerOne、Bugcrowd 或私有 GitHub Advisory)上提交报告。
### 请提供以下信息(有助于快速处理):
- 漏洞的类型(SQL注入、跨站脚本攻击、路径遍历等)。
- 受影响的文件或功能。
- 重现该漏洞的详细步骤(PoC 代码或截图很有帮助)。
- 潜在的影响或利用场景。
- (可选) 你的联系信息。
### 我们会做什么:
- **确认收到**:在 **48小时** 内回复你,确认我们已经收到报告。
- **评估与修复**:评估漏洞的严重性,并在 **合理的时间内**(通常为 5-14 天,取决于严重程度)发布修复版本。
- **保持沟通**:在修复过程中,我们会与你保持沟通,告知进度。
- **致谢**:如果你愿意,我们会在安全公告或发布说明中公开致谢。
## 漏洞披露政策
- 我们会在修复完成后公布安全公告。
- 在修复未完成之前,我们要求你**不要公开披露**漏洞细节。
- 我们承诺在修复版本发布后,给予研究人员合理的公示时间(30 天)以便更新。
## 安全相关信息
- **加密通信**:如果你想加密你的邮件,请使用我们的 PGP 公钥。[下载公钥](https://yourdomain.com/pgp-key.asc)
- 指纹:`ABCD 1234 ...` (请填写你的PGP指纹)
- **范围**:此政策适用于以下仓库/产品:
- 主仓库:[GitHub Repo URL]()
- 官方 Docker 镜像:`your/image:tag`
- **不列入范围**:
- 拒绝服务(DoS)/ 资源耗尽攻击(除非有直接的安全影响)
- 关于启用/禁用某个功能的报告,如果没有安全后果
- Social Engineering 攻击本项目自身团队成员
---
*最后更新于:YYYY-MM-DD*
详细编写指南(每个部分的解释)
支持的版本 (Supported Versions)
- 为什么重要:用户需要知道哪些版本是安全的,如果你不维护旧版本,明确告知用户应该升级。
- 最佳实践:使用表格清晰列出,通常只支持最新的主版本(2.x)和最新的次版本(2.1.x),对于过时的版本,明确标注“不支持”。
报告漏洞 (Reporting a Vulnerability)
这是最核心的部分。
- 明确禁止公开披露:使用加粗或警告语气。“请不要在 GitHub Issues 中提交安全相关的 bug”。
- 提供私密渠道:
- 首选:一个专属的邮箱地址(如
security@yourproject.io),这最好由多人共同管理。 - 备用:使用 GitHub 的 Private Vulnerability Reporting(推荐),这是 GitHub 内置的功能,可以通过仓库的
Settings > Security > Private vulnerability reporting启用,然后在你的SECURITY.md中直接写“请使用 GitHub 的 Private Vulnerability Reporting”。
- 首选:一个专属的邮箱地址(如
- 期望的响应时间:给一个具体的时间承诺,48小时内回复”,这能增加研究人员的信任。
漏洞披露政策 (Disclosure Policy)
- 协调披露:这是业界的标准做法(Coordinated Disclosure),意思是你同意在修复完成后才公开,你也应该承诺,在修复版本发布后,你可以公开致谢或发布公告。
- 禁止早于修复公开:明确要求研究人员在修复前不要公开细节。
安全相关信息 (Security-Related Information)
- PGP 公钥:对于敏感项目,建议提供一个 PGP 密钥,以便研究人员可以加密邮件。
- 范围:明确说明此政策覆盖哪些代码、镜像或仓库。
- 不列入范围:说明哪些情况不算安全漏洞(默认配置不够强、需要物理接触的攻击等),这可以减少无效报告。
高级变体(按项目类型)
-
小型开源库:可以简化,主要使用 GitHub 的 Private Vulnerability Reporting。
# Security Policy We take the security of this project seriously. ## Reporting a Vulnerability Please do **NOT** report security vulnerabilities via public GitHub issues. Instead, please report them via the **GitHub Private Vulnerability Reporting** feature on this repository. You can find the button on the "Security" tab of the repo. We will acknowledge receipt of your report within 72 hours and will aim to release a fix within 14 days.
-
大型企业级项目:更加正式,包含法律声明、赏金政策(如果有)、完整PGP密钥、多次确认机制。
-
Web 应用/API:可以增加具体的漏洞类型描述,“我们特别关注XSS、CSRF、SQLi、SSRF、IDOR等。”
如何放置文件
- 文件名:
SECURITY.md - 位置:仓库根目录或
.github目录下,GitHub 会自动检测并在仓库的 “Security” 标签页和右侧信息栏中显示一个链接。
总结建议
- 从简单开始:先启用 GitHub 的 Private Vulnerability Reporting,写一个三句话的
SECURITY.md引导到那里。 - 确保邮箱有人看:如果用邮箱,一定要设置邮件列表或转发到项目维护者的邮箱,不要只用一个人的邮箱。
- 定期更新:如果版本支持策略或邮箱变了,记得更新
SECURITY.md。 - 保持友好:即使报告是低质量的,也要礼貌回复,因为他们是帮助你的人(或至少是愿意花时间的人)。