Skip to main content

在临时专用分支中协作以解决存储库安全漏洞

你可以创建临时私有分支,以私下协作修复公共存储库中的安全漏洞。

注意:本文适用于以公共存储库所有者身份编辑存储库级别建议的情形。

不是存储库所有者的用户可以在 github.com/advisories 上的 GitHub Advisory Database 中参与全局安全建议。 对全局公告的编辑不会改变或影响公告在存储库中的显示方式。 有关详细信息,请参阅“在 GitHub Advisory Database 中编辑安全公告”。

先决条件

在临时私有复刻中进行协作之前,必须创建维护员通告草稿。 有关详细信息,请参阅“创建存储库安全公告”。

创建临时私有复刻

任何对安全通告有管理权限的人都可以创建临时私有复刻。

为保证漏洞相关信息的安全,集成系统(包括 CI)无法访问临时私有复刻。

  1. 在 GitHub 上,导航到存储库的主页面。

  2. 在存储库名称下,单击“ 安全性”。 如果看不到“安全性”选项卡,请选择 下拉菜单并单击“安全性” 。

    存储库标头的屏幕截图,其中显示了选项卡。 “安全性”选项卡以深橙色边框突出显示。

  3. 在左侧边栏中的“报告”下,单击“ 公告”。

  4. 在“安全公告”列表中,单击要在其中创建临时私有分支的安全公告的名称。

  5. 滚动到公告窗体底部,然后单击“启动临时私有分支”。

    窗体的“私下协作处理修补程序”区域的屏幕截图。 标记为“启动临时私有分支”的按钮以深橙色框出。

    将创建存储库的私有分支,并显示在公告页上。

    专用分支的命名约定与 GitHub Advisory Database 中用于公告的约定非常相似,并遵循以下格式:repo-ghsa-xxxx-xxxx-xxxx,其中:

    • repo 是存储库的名称。 为了保持存储库名称不超过 100 个字符的限制,我们将原始存储库的名称截断为 80 个字符。
    • xxxx-xxxx-xxxx 是安全公告草稿的唯一标识符:
      • x 是以下集中的字母或数字:23456789cfghjmpqrvwx
      • 数字和字母是随机分配的。
      • 所有字母和数字均为小写。

例如,如果在名为 octocat-repo 的存储库中创建一个临时专用分支,并且为草稿公告自动生成的 ID 为 GHSA-x854-cvjg-vx26,则临时分支名为 octocat-repo-ghsa-x854-cvjg-vx26

还可以使用 REST API 创建临时专用分支。 有关详细信息,请参阅 REST API 文档中的“创建临时专用分支”。

将协作者添加到临时私有复刻

对安全通告具有管理员权限的任何人都可以向安全通告添加其他协作者,而安全通告的协作者可以访问临时私有复刻。 有关详细信息,请参阅“将协作者添加到存储库安全通告”。

将更改添加到临时私有复刻

任何对安全公告有写入权限的人都可以通过向临时私有分支添加更改来协作处理修补程序。

  1. 在 GitHub 上,导航到存储库的主页面。

  2. 在存储库名称下,单击“ 安全性”。 如果看不到“安全性”选项卡,请选择 下拉菜单并单击“安全性” 。

    存储库标头的屏幕截图,其中显示了选项卡。 “安全性”选项卡以深橙色边框突出显示。

  3. 在左侧边栏中的“报告”下,单击“ 公告”。

  4. 在“安全公告”列表中,单击要处理的安全公告的名称。

  5. 可以在 GitHub 上或在本地添加更改:

    • 若要对 GitHub 进行更改,请在“协作处理修补程序”下单击“临时私有分支”。 然后,创建新分支并编辑文件。 有关详细信息,请参阅“创建和删除仓库中的分支”和“编辑文件”。
    • 要在本地添加更改,请按照“克隆并创建新分支”和“进行更改,然后推送”下的说明进行操作。

    安全公告草稿的“协作处理修补程序”区域的屏幕截图。 “临时私有分支”链接以深橙色框出。

从临时私有复刻创建拉取请求

任何对安全通告有写入权限的人都可以从临时私有复刻创建拉取请求。

  1. 在 GitHub 上,导航到存储库的主页面。

  2. 在存储库名称下,单击“ 安全性”。 如果看不到“安全性”选项卡,请选择 下拉菜单并单击“安全性” 。

    存储库标头的屏幕截图,其中显示了选项卡。 “安全性”选项卡以深橙色边框突出显示。

  3. 在左侧边栏中的“报告”下,单击“ 公告”。

  4. 在“安全公告”列表中,单击要在其中创建拉取请求的安全公告的名称。

  5. 滚动到公告窗体底部。 然后,在“协作处理修补程序”下,单击“比较和拉取请求“,为关联的分支创建拉取请求。

    安全公告草稿的“协作处理修补程序”区域的屏幕截图。 “比较和拉取请求”按钮以深橙色框出。
    “打开拉取请求”包括一个标头,其中显示了在创建拉取请求时将在三点 Git 差异比较中比较的分支。 有关详细信息,请参阅“关于比较拉取请求中的分支”。

  6. 要创建可供审查的拉取请求,请单击“创建拉取请求”。 若要创建草稿拉取请求,请使用下拉列表并选择“创建草稿拉取请求”,然后单击“草稿拉取请求” 。 如果你是组织的成员,则可能需要从组织所有者请求对草稿拉取请求的访问权限。 请参阅“关于拉取请求”。

您不能在临时私有复刻中合并个别拉取请求。 而可以在相应的安全通告中一次合并所有打开的拉取请求。 有关详细信息,请参阅“合并安全通告中的更改”。

合并安全通告中的更改

对安全通告具有管理员权限的任何人都可合并安全通告中的更改。

您不能在临时私有复刻中合并个别拉取请求。 而可以在相应的安全通告中一次合并所有打开的拉取请求。

在合并安全通告中的更改之前,临时私有复刻中每个打开的拉取请求必须为可合并状态。 为保证漏洞相关信息的安全,不在临时私有复刻的拉取请求上运行状态检查。 有关详细信息,请参阅“关于受保护分支”。

此外,不会发生合并冲突,对于你尝试将更改合并到的分支,GitHub 不会强制执行你可能为该分支设置的任何保护规则。

  1. 在 GitHub 上,导航到存储库的主页面。

  2. 在存储库名称下,单击“ 安全性”。 如果看不到“安全性”选项卡,请选择 下拉菜单并单击“安全性” 。

    存储库标头的屏幕截图,其中显示了选项卡。 “安全性”选项卡以深橙色边框突出显示。

  3. 在左侧边栏中的“报告”下,单击“ 公告”。

  4. 在“安全公告”列表中,单击要合并其更改的安全公告的名称。

  5. 滚动到公告窗体底部。 然后,在“此公告已准备好合并”下,单击“合并一个或多个拉取请求”以合并临时私有分支中所有打开的拉取请求。

    安全公告草稿的“协作处理修补程序”区域的屏幕截图。 “合并拉取请求”按钮以深橙色框出。

注意:只能将一个拉取请求合并到临时私有分支的 main 分支中。 如果多个拉取请求以 main 分支为目标,则会阻止合并。

合并安全通告中的更改后,您可以发布安全通告,以提醒您的社区有关项目早期版本中安全漏洞的信息。 有关详细信息,请参阅“发布存储库安全公告”。

延伸阅读