# 推送保护

通过推送保护阻止机密到达存储库，从而保护机密。

## 什么是推送保护？

推送保护是一项 secret scanning 功能，旨在防止将硬编码凭据（如机密或令牌）推送到存储库。 推送保护会在在访问存储库_之前_阻止包含机密的推送，而不是提醒凭据泄漏。

## 推送保护的工作原理

推送保护会阻止在以下场景中检测到的机密：

* 从命令行推送
* 在 GitHub UI 中提交的提交
* 文件上传到存储库 GitHub
* 对 REST API 的请求
* 与 GitHub MCP 服务器（仅限公共存储库）的交互

当推送保护在推送尝试期间检测到潜在的机密时，它将阻止推送并提供详细的消息，说明阻止的原因。 你需要审查相关代码，删除所有敏感信息，然后重新尝试推送。

## 推送保护的类型

有两种类型的推送保护：

* [存储库的推送保护](#push-protection-for-repositories)
*               [用户的推送保护](#push-protection-for-users)

### 存储库的推送保护

可以在存储库、组织或企业级为存储库启用推送保护。 这种形式的推送保护：
* GitHub Secret Protection需要启用
* 默认禁用，并且可由存储库管理员、组织所有者、安全管理器或企业所有者启用
* 阻止包含机密的推送访问特定的受保护存储库
* 在存储库、组织和企业的 **<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-shield" aria-label="shield" role="img"><path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg> Security** 选项卡中为推送保护绕过生成警报

### 用户的推送保护

用户的推送保护仅适用于 GitHub.com，并且特定于你的 GitHub帐户。 这种形式的推送保护：
* 默认启用
* 阻止将机密推送到 GitHub 上的公共存储库
* 除非在存储库级别也启用推送保护，否则不会在绕过推送保护时生成警报

## 推送保护绕过和警报

对于存储库的推送保护，默认情况下，对存储库具有写入访问权限的任何人都可以通过指定绕过原因来绕过推送保护。 当贡献者绕过推送保护阻止时， GitHub：
* 在存储库、组织和企业的 **<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-shield" aria-label="shield" role="img"><path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg> Security** 选项卡中创建警报
* 将绕过事件添加到审核日志
* 向正在监视存储库的个人帐户、组织与企业所有者、安全经理和存储库管理员发送电子邮件警报，邮件中包含隐私信息的链接及其允许的原因。

下表显示了用户可指定的每个绕过原因的警报行为。

| 绕行原因         | 警报行为                                              |
|-----------------------|------------------------------------------------------|
| 用于测试    | 
GitHub 创建已关闭的警报，解析为“在测试中使用”  |
| 这是误报 | 
GitHub 创建已关闭的警报，解析为“误报” |
| 我稍后会修复它     | 
GitHub 创建打开的警报                                |

如果想更好地控制哪些参与者可以绕过推送保护，以及应允许哪些包含机密的推送，则可以配置推送保护指定组审阅者来监督和管理绕过请求。

## 推送保护的优点

* **预防安全性：** 推送保护通过扫描代码来扫描推送时硬编码的机密，充当一种前线防御机制。 这种预防性方法有助于在凭据泄漏根植于存储库历史记录之前加以阻止，从而更轻松地解决和减轻威胁。
* **即时反馈：** 如果在推送尝试期间检测到潜在机密，开发人员会收到即时反馈。 这种即时通知支持快速修正，降低敏感信息泄露的可能性。
* **降低凭据泄漏的风险：** 通过阻止包含硬编码凭据的提交，推送保护可显著降低意外凭据泄漏和机密蔓延的风险。 这有助于防止潜在的泄露和维护代码库的完整性。
* **高效的机密管理：** 开发人员无需事后处理泄露的机密，而是可以从源头解决问题。 这使机密管理更高效、更省时。
* **绕过功能实现灵活性：** 对于发生误报或需要某些模式的情况，可以绕过用户的推送保护，并且指定的用户可以使用委派的绕过功能来绕过存储库的推送保护。               从推送保护中完全豁免受信任行为者。 
这提供了灵活性，而不会损害整体安全性。
* **能够检测自定义模式（适用于组织中的存储库）：** 组织可以定义用于检测其环境特有的机密的自定义模式。 此自定义可确保推送保护可以有效地识别和阻止非标准机密。

## Customization

为存储库启用推送保护后，可以通过以下方式对其进行自定义：

* 定义自定义模式以阻止包含唯一机密模式的推送
* 指定可以绕过推送保护并批准其他参与者的绕过请求或完全免除推送保护的参与者