什么是推送保护?
推送保护是一项 secret scanning 功能,旨在防止将硬编码凭据(如机密或令牌)推送到存储库。 推送保护会在在访问存储库_之前_阻止包含机密的推送,而不是提醒凭据泄漏。
推送保护的工作原理
当推送保护在推送尝试期间检测到潜在的机密时,它将阻止推送并提供详细的消息,说明阻止的原因。 你需要审查相关代码,删除所有敏感信息,然后重新尝试推送。
推送保护可以阻止以下类型的机密。
伙伴模式
GitHub 会阻止包含该提供程序特定凭据的推送(前提是 secret scanning 的合作伙伴计划为该机密支持推送保护)。 请参阅 支持的提供程序模式。
泛型模式
GitHub 阻止包含未绑定到特定提供程序的结构化机密的推送,例如私钥和数据库连接字符串。 必须在存储库的安全设置或安全配置中启用通用模式扫描和推送保护,此功能才能正常工作。 还必须在组织或企业的推送保护模式的配置中启用相关模式。 请参阅 指定要包含在推送保护中的模式。
自定义模式
GitHub 阻止包含自定义模式的推送,这些模式是用于检测特定于存储库、组织或企业的机密的正则表达式。 定义自定义模式时,可以选择为其启用推送保护。 请参阅“为机密扫描定义自定义模式”。
使用 AI 找到的通用凭据
注意
推送 AI 检测到的机密 保护位于 公开预览 且可能会发生更改。
GitHub 阻止推送包含非结构化机密(如密码)的内容,这些机密是 AI 根据周围代码上下文发现的。 若要了解此功能的计费方式,请参阅 GitHub Advanced Security 许可证计费。 若要启用该功能,请参阅 为 AI 检测到的机密启用推送保护。
支持的推送界面
下表显示了每个推送界面上阻止了哪些机密类型。
| 推送曲面 | 合作伙伴模式集 | 泛型模式 | 自定义模式 | AI 发现的通用密钥 |
|---|---|---|---|---|
| 从命令行推送 | ||||
| 在 GitHub UI 中提交的提交 | ||||
| 文件上传到存储库 GitHub | ||||
| 对 REST API 的请求 | ||||
| 与 GitHub MCP 服务器(仅限公共存储库)的交互 |
推送保护的类型
有两种类型的推送保护:
存储库的推送保护
可以在存储库、组织或企业级为存储库启用推送保护。 这种形式的推送保护:
- GitHub Secret Protection需要启用
- 默认禁用,并且可由存储库管理员、组织所有者、安全管理器或企业所有者启用
- 阻止包含机密的推送访问特定的受保护存储库
- 在存储库、组织和企业的 Security and quality 选项卡中为推送保护绕过生成警报
提示
无论推送保护的启用状态如何,组织GitHub TeamGitHub Enterprise都可以运行免费报告来扫描其代码中泄露的机密。 报告还显示推送保护可能阻止了多少个机密泄漏。 请参阅“借助 GitHub 实现机密保护”。
用户的推送保护
用户的推送保护仅适用于 GitHub.com,并且特定于你的 GitHub帐户。 这种形式的推送保护:
- 默认启用
- 阻止将机密推送到 GitHub 上的公共存储库
- 除非在存储库级别也启用推送保护,否则不会在绕过推送保护时生成警报
推送保护绕过和警报
对于存储库的推送保护,默认情况下,对存储库具有写入访问权限的任何人都可以通过指定绕过原因来绕过推送保护。 当贡献者绕过推送保护阻止时, GitHub:
- 在存储库、组织和企业的 Security and quality 选项卡中创建警报
- 将绕过事件添加到审核日志
- 向正在监视存储库的个人帐户、组织与企业所有者、安全经理和存储库管理员发送电子邮件警报,邮件中包含隐私信息的链接及其允许的原因。
下表显示了用户可指定的每个绕过原因的警报行为。
| 绕行原因 | 警报行为 |
|---|---|
| 用于测试 | |
| GitHub 创建已关闭的警报,解析为“在测试中使用” | |
| 这是误报 | |
| GitHub 创建已关闭的警报,解析为“误报” | |
| 我稍后会修复它 | |
| GitHub 创建打开的警报 |
如果想更好地控制哪些参与者可以绕过推送保护,以及应允许哪些包含机密的推送,则可以配置推送保护委派绕过。 委派绕过功能允许您授予用户权限:
- 绕过特权,允许他们绕过推送保护本身,以及查看和批准来自其他参与者的绕过请求
- 免除推送保护,允许他们推送提交,而无需触发推送保护
推送保护的优点
- 预防安全性: 推送保护通过扫描代码来扫描推送时硬编码的机密,充当一种前线防御机制。 这种预防性方法有助于在凭据泄漏根植于存储库历史记录之前加以阻止,从而更轻松地解决和减轻威胁。
- 即时反馈: 如果在推送尝试期间检测到潜在机密,开发人员会收到即时反馈。 这种即时通知支持快速修正,降低敏感信息泄露的可能性。
- 降低凭据泄漏的风险: 通过阻止包含硬编码凭据的提交,推送保护可显著降低意外凭据泄漏和机密蔓延的风险。 这有助于防止潜在的泄露和维护代码库的完整性。
- 高效的机密管理: 开发人员无需事后处理泄露的机密,而是可以从源头解决问题。 这使机密管理更高效、更省时。
- 绕过功能实现灵活性: 对于发生误报或需要某些模式的情况,可以绕过用户的推送保护,并且指定的用户可以使用委派的绕过功能来绕过存储库的推送保护。 此外,还可以在组织和企业级别从推送保护中完全豁免受信任行为者。 这提供了灵活性,而不会损害整体安全性。
- 能够检测自定义模式(适用于组织中的存储库): 组织可以定义用于检测其环境特有的机密的自定义模式。 此自定义可确保推送保护可以有效地识别和阻止非标准密钥。
- 超出已知模式的覆盖范围: AI 检测非结构化机密(如密码),而正则表达式都无法可靠地匹配这类机密。
Customization
为存储库启用推送保护后,可以通过以下方式对其进行自定义:
- 定义自定义模式以阻止包含唯一机密模式的推送
- 指定可以绕过推送保护并批准其他参与者的绕过请求或完全免除推送保护的参与者
- 配置哪些机密模式包含在企业或组织级别的推送保护中