# 防止组织中数据泄露的最佳做法

了解有助于避免组织中存在的专用或敏感数据被公开的指导和建议。

## 关于本指南

作为组织所有者，防止泄露专用或敏感数据应该是首要任务。 无论是有意还是意外，数据泄露都可能给相关方带来重大风险。 虽然 GitHub 采取措施来帮助防止数据泄漏，但你还负责管理组织来强化安全性。

在防范数据泄露方面，有几个关键组件：

* 采取主动的预防方法
* 及早检测可能的泄露
* 在事件发生时维护缓解计划

最佳方法取决于所管理的组织类型。 例如，专注于开放源代码开发的组织可能需要比完全商业化的组织更宽松的控制，以允许外部协作。 本文提供关于GitHub功能和设置的整体指导，您应根据您的需求来实施这些功能和设置。

## 保护帐户

通过实施安全最佳做法来保护组织的存储库和设置，包括启用 2FA 并要求所有成员使用 2FA，以及建立强密码准则。

* 要求组织成员、外部协作者和计费经理为其个人帐户启用 2FA，从而使恶意参与者更难访问组织的存储库和设置。 有关详细信息，请参阅“[在你的组织中要求进行双因素身份验证](/zh/enterprise-server@3.19/organizations/keeping-your-organization-secure/managing-two-factor-authentication-for-your-organization/requiring-two-factor-authentication-in-your-organization)”。

* 根据 GitHub 推荐的密码指导原则，鼓励用户设置强密码并按照指南适当保护它们。 有关详细信息，请参阅 [创建强密码](/zh/enterprise-server@3.19/authentication/keeping-your-account-and-data-secure/creating-a-strong-password)。

* 在其中 GitHub建立内部安全策略，以便用户知道要采取的适当步骤，以及如果怀疑发生事件，则与谁联系。 有关详细信息，请参阅“[将安全策略添加到存储库](/zh/enterprise-server@3.19/code-security/getting-started/adding-a-security-policy-to-your-repository)”。

有关保护帐户的详细信息，请参阅 [确保帐户安全的最佳做法](/zh/enterprise-server@3.19/code-security/supply-chain-security/end-to-end-supply-chain/securing-accounts)。

## 防止数据泄露

作为组织所有者，应根据组织类型适当地限制和查看访问权限。 请考虑以下设置进行更严格的控制：

| Recommendation                                                                                                                                                                                                                                                                                                                                 | 详细信息                                                                         |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
| 禁用创建存储库分支的功能。                                                                                                                                                                                                                                                                                                                                  |                                                                              |
| [管理仓库的复刻政策](/zh/enterprise-server@3.19/repositories/managing-your-repositorys-settings-and-features/managing-repository-settings/managing-the-forking-policy-for-your-repository)                                                                                                                                                              |                                                                              |
| 禁止更改存储库可见性。                                                                                                                                                                                                                                                                                                                                    |                                                                              |
| [限制在组织中更改仓库可见性](/zh/enterprise-server@3.19/organizations/managing-organization-settings/restricting-repository-visibility-changes-in-your-organization)                                                                                                                                                                                        |                                                                              |
| 将存储库创建限制为专用或内部。                                                                                                                                                                                                                                                                                                                                |                                                                              |
| [限制在组织中创建仓库](/zh/enterprise-server@3.19/organizations/managing-organization-settings/restricting-repository-creation-in-your-organization)                                                                                                                                                                                                     |                                                                              |
| 禁用存储库删除和传输。                                                                                                                                                                                                                                                                                                                                    |                                                                              |
| [设置删除或转让仓库的权限](/zh/enterprise-server@3.19/organizations/managing-organization-settings/setting-permissions-for-deleting-or-transferring-repositories)                                                                                                                                                                                          |                                                                              |
|                                                                                                                                                                                                                                                                                                                                                |                                                                              |
| 禁用使用部署密钥的功能。                                                                                                                                                                                                                                                                                                                                   |                                                                              |
| [限制在您的组织中使用部署密钥](/zh/enterprise-server@3.19/organizations/managing-organization-settings/restricting-deploy-keys-in-your-organization)                                                                                                                                                                                                         |                                                                              |
|                                                                                                                                                                                                                                                                                                                                                |                                                                              |
| 范围 personal access token限定为所需的最低权限。                                                                                                                                                                                                                                                                                                            | None                                                                         |
| 通过在适当的时候将公共存储库转换为专用存储库来保护代码。 可以使用GitHub App自动通知仓库所有者此更改。                                                                                                                                                                                                                                                                                       | GitHub Marketplace 中的[防止公共存储库](https://github.com/apps/prevent-public-repos) |
| 通过验证域并将电子邮件通知仅限于已验证的电子邮件域来确认组织的标识。                                                                                                                                                                                                                                                                                                             |                                                                              |
| [验证或批准您组织的域名](/zh/enterprise-server@3.19/organizations/managing-organization-settings/verifying-or-approving-a-domain-for-your-organization) 和 [限制组织的电子邮件通知](/zh/enterprise-server@3.19/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/restricting-email-notifications-for-your-organization) |                                                                              |
| 防止参与者进行意外提交。                                                                                                                                                                                                                                                                                                                                   |                                                                              |
| [从存储库中删除敏感数据](/zh/enterprise-server@3.19/authentication/keeping-your-account-and-data-secure/removing-sensitive-data-from-a-repository#avoiding-accidental-commits-in-the-future)                                                                                                                                                              |                                                                              |

## 检测数据泄露

无论你如何加强组织以防止数据泄露，某些问题仍可能发生，可以通过使用 secret scanning、审核日志和分支保护规则来应对此类情况。

### 使用 secret scanning

Secret scanning 通过扫描和检测 GitHub 存储库中每个分支的完整 Git 历史记录中意外提交的机密，帮助保护代码并跨组织和存储库保持机密安全。 任何匹配由你或你的组织定义的字符串，都会在存储库的 **<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** 选项卡中报告为警报。

> \[!TIP]
> 无论secret scanning的启用状态和推送保护如何，GitHub Team和GitHub Enterprise上的组织都可以运行免费报告，扫描组织中代码以发现泄露的机密。 请参阅 [借助 GitHub 实现机密保护](/zh/enterprise-server@3.19/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/about-secret-risk-assessment)。

站点管理员必须先为实例启用 secret scanning ，然后才能使用此功能。 有关详细信息，请参阅 [为设备配置密码扫描](/zh/enterprise-server@3.19/admin/code-security/managing-github-advanced-security-for-your-enterprise/configuring-secret-scanning-for-your-appliance)。

有关 secret scanning 的详细信息，请参阅 [秘密扫描](/zh/enterprise-server@3.19/code-security/secret-scanning/introduction/about-secret-scanning)。

还可以启用 secret scanning 作为存储库或组织的推送保护。 启用此功能时，secret scanning 会阻止参与者用检测到的机密来推送代码。 有关详细信息，请参阅 [推送保护](/zh/enterprise-server@3.19/code-security/secret-scanning/protecting-pushes-with-secret-scanning)。 最后，还可以扩展检测以包含自定义机密字符串结构。 有关详细信息，请参阅“[为机密扫描定义自定义模式](/zh/enterprise-server@3.19/code-security/secret-scanning/using-advanced-secret-scanning-and-push-protection-features/custom-patterns/defining-custom-patterns-for-secret-scanning)”。

### 审查组织的审核日志

你还可以利用组织的审核日志及 GraphQL 审核日志 API，主动保护 IP 并维护组织的合规性。 有关详细信息，请参阅 [查看贵组织的审核日志](/zh/enterprise-server@3.19/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/reviewing-the-audit-log-for-your-organization) 和 [企业管理](/zh/enterprise-server@3.19/graphql/reference/enterprise-admin#interface-auditentry)。

### 设置分支保护规则

要确保所有代码在合并到默认分支之前都经过适当的评审，可以启用分支保护。 通过设置分支保护规则，可以在参与者推送更改之前强制实施某些工作流或要求。 有关详细信息，请参阅“[关于受保护分支](/zh/enterprise-server@3.19/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches)”。

作为分支保护规则的替代方法，可以创建规则集。 规则集在分支保护规则（例如状态）和更好的可发现性（无需管理员访问权限）上具有一些优势。 还可以同时应用多个规则集。 有关详细信息，请参阅“[关于规则集](/zh/enterprise-server@3.19/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/about-rulesets)”。

## 缓解数据泄露

如果用户推送了敏感数据，请要求他们使用 `git filter-repo` 工具将其删除。 有关详细信息，请参阅“[从存储库中删除敏感数据](/zh/enterprise-server@3.19/authentication/keeping-your-account-and-data-secure/removing-sensitive-data-from-a-repository)”。 此外，如果敏感数据尚未推送，则只需在本地撤消这些更改;有关详细信息，请参阅 [the GitHub Blog](https://github.blog/2015-06-08-how-to-undo-almost-anything-with-git/) （但请注意， `git revert` 在 Git 历史记录中保留原始敏感提交时，无法撤消添加敏感数据的有效方法）。

如果无法直接与存储库所有者协调以删除你确信拥有的数据，可以填写 DMCA 删除通知表单并告知 GitHub 支持。  确保包含有问题的提交哈希值。  有关详细信息，请参阅 [DMCA 删除通知](https://support.github.com/contact/dmca-takedown)。

> \[!NOTE]
> 如果你的某个存储库因虚假声明而被下架，应填写 DMCA 抗辩通知表单并通知 GitHub 支持团队。 有关详细信息，请参阅 [DMCA 抗辩通知](https://support.github.com/contact/dmca-counter-notice)。

## 后续步骤

* [保护供应链中的代码的最佳做法](/zh/enterprise-server@3.19/code-security/supply-chain-security/end-to-end-supply-chain/securing-code)
* [保护生成系统的最佳做法](/zh/enterprise-server@3.19/code-security/supply-chain-security/end-to-end-supply-chain/securing-builds)