Skip to main content

Отправка ветви, заблокированной защитой от отправки

Защита от упреждающей отправки защищает вас от утечки секретов в репозиториях. Вы можете разрешить заблокированные отправки и после удаления обнаруженного секрета отправить изменения в рабочую ветвь из командной строки или пользовательского веб-интерфейса.

Кто может использовать эту функцию?

Push protection is available for organization-owned repositories in GitHub Enterprise Server if your enterprise has a license for GitHub Advanced Security.

For more information, see "Push protection for repositories and organizations."

Сведения о защите push-уведомлений

Защита от push-уведомлений помогает предотвратить утечку безопасности путем сканирования секретов перед отправкой изменений в репозиторий.

При попытке отправить секрет в репозиторий, защищенный защитой push-уведомлений, GitHub блокирует отправку. Перед повторной отправкой необходимо удалить секрет из ветви. Дополнительные сведения о том, как устранить заблокированную отправку, см. в разделе "Разрешение заблокированной отправки в командной строке" и "Разрешение заблокированной фиксации в веб-интерфейсе" в этой статье.

Если вы считаете, что это безопасно, чтобы разрешить секрет, вы иметь возможность обойти защиту. Дополнительные сведения см. в разделе Работа с защитой push-уведомлений.

Сведения о секретах и поставщиках услуг, поддерживаемых для защиты push-уведомлений, см. в разделе "Шаблоны сканирования секретов".

Как разрешить заблокированную отправку в командной строке

При попытке отправить поддерживаемый секрет в репозиторий, защищенный защитой push-уведомлений, GitHub блокирует отправку. Вы можете удалить секрет из ветви или следовать предоставленному URL-адресу для разрешения отправки.

Примечания:

  • Если конфигурация Git поддерживает отправку в несколько ветвей, а не только в текущую ветвь, отправка может быть заблокирована из-за дополнительных и непреднамеренных ссылок. Дополнительные сведения см. в разделе Параметры push.default в документации Git.
  • Если истечет время ожидания secret scanning при отправке, GitHub все равно выполнит проверку фиксаций на наличие секретов после отправки.

Удаление секрета, введенного последней фиксацией в ветви

Если заблокированный секрет был внесен последней фиксацией в вашей ветви, следуйте приведенным ниже инструкциям.

  1. Удалите секрет из кода.
  2. Чтобы зафиксировать изменения, выполните команду git commit --amend. Это обновляет исходную фиксацию, которая представила секрет вместо создания новой фиксации.
  3. Отправьте изменения с помощью команды git push.

Удаление секрета, введенного более ранней фиксацией в ветви

Вы также можете удалить секрет, если он отображается в более ранней фиксации в журнале Git. Для этого необходимо определить, какая фиксация впервые представила секрет и изменить журнал фиксации с помощью интерактивной повторной базы.

  1. Проверьте сообщение об ошибке, отображаемое при попытке отправить ветвь, в которой перечислены все фиксации, содержащие секрет.

    remote:   —— GitHub Personal Access Token ——————————————————————
    remote:    locations:
    remote:      - commit: 8728dbe67
    remote:        path: README.md:4
    remote:      - commit: 03d69e5d3
    remote:        path: README.md:4
    remote:      - commit: 8053f7b27
    remote:        path: README.md:4
    
  2. Затем выполните команду git log , чтобы просмотреть полную историю всех фиксаций в ветви, а также соответствующие метки времени.

    test-repo (test-branch)]$ git log
    commit 8053f7b27 (HEAD -> main)
    Author: Octocat <1000+octocat@users.noreply.github.com
    Date:   Tue Jan 30 13:03:37 2024 +0100
    
      my fourth commit message
    
    commit 03d69e5d3
    Author: Octocat <1000+octocat@users.noreply.github.com>
    Date:   Tue Jan 30 13:02:59 2024 +0100
    
      my third commit message
    
    commit 8728dbe67
    Author: Octocat <1000+octocat@users.noreply.github.com
    Date:   Tue Jan 30 13:01:36 2024 +0100
    
      my second commit message
    
    commit 6057cbe51
    Author: Octocat <1000+octocat@users.noreply.github.com
    Date:   Tue Jan 30 12:58:24 2024 +0100
    
      my first commit message
    
    
  3. Focusing only on the commits that contain the secret, use the output of git log to identify which commit comes earliest in your Git history.

    • In the example, commit 8728dbe67 was the first commit to contain the secret.
  4. Start an interactive rebase with git rebase -i <COMMIT-ID>~1.

    • For <COMMIT-ID>, use the commit identified in step 3. For example, git rebase -i 8728dbe67~1.
  5. In the editor, choose to edit the commit identified in step 3 by changing pick to edit on the first line of the text.

    edit 8728dbe67 my second commit message
    pick 03d69e5d3 my third commit message
    pick 8053f7b27 my fourth commit message
    
  6. Сохраните и закройте редактор, чтобы запустить интерактивную перебазу.

  7. Удалите секрет из кода.

  8. Зафиксируйте изменения с помощью git commit --amend.

  9. Выполните команду git rebase --continue, чтобы завершить перемещение изменений из одной ветви в другую.

  10. Отправьте изменения с помощью команды git push.

Как разрешить заблокированную фиксацию в пользовательском веб-интерфейсе

При использовании веб-интерфейса для фиксации поддерживаемого секрета в репозитории, защищенном защитой push-уведомлений, GitHub блокирует фиксацию.

Откроется диалоговое окно с информацией о расположении секрета, а также параметры, позволяющие отправить секрет. Секрет также будет подчеркнут в файле, чтобы его можно было легко найти.

Чтобы устранить заблокированную фиксацию в веб-интерфейсе, необходимо удалить секрет из файла. После удаления секрета вы сможете зафиксировать изменения.

Кроме того, если определить, что секрет безопасно разрешить, используйте параметры, отображаемые в диалоговом окне, для обхода защиты от отправки. Дополнительные сведения об обходе защиты push-уведомлений из веб-интерфейса см. в разделе "Работа с защитой push-уведомлений".

Дополнительные материалы