Сведения о защите push-уведомлений
Защита от push-уведомлений помогает предотвратить утечку безопасности путем сканирования секретов перед отправкой изменений в репозиторий.
При попытке отправить секрет в репозиторий, защищенный защитой push-уведомлений, GitHub блокирует отправку. Перед повторной отправкой необходимо удалить секрет из ветви. Дополнительные сведения о том, как устранить заблокированную отправку, см. в разделе "Разрешение заблокированной отправки в командной строке" и "Разрешение заблокированной фиксации в веб-интерфейсе" в этой статье.
Если вы считаете, что это безопасно разрешить секрет, у вас есть возможность обойти защиту. Дополнительные сведения см. в разделе "Разрешение принудительной отправки заблокированного секрета" и "Обход защиты от принудительной отправки секрета".
Сведения о секретах и поставщиках услуг, поддерживаемых для защиты push-уведомлений, см. в разделе "Шаблоны сканирования секретов".
Как разрешить заблокированную отправку в командной строке
При попытке отправить поддерживаемый секрет в репозиторий, защищенный защитой push-уведомлений, GitHub блокирует отправку. Вы можете удалить секрет из ветви или перейти по указанному URL-адресу, чтобы разрешить отправку.
Примечания:
- Если конфигурация Git поддерживает отправку в несколько ветвей, а не только в текущую ветвь, отправка может быть заблокирована из-за дополнительных и непреднамеренных ссылок. Дополнительные сведения см. в разделе Параметры
push.default
в документации Git. - Если истечет время ожидания secret scanning при отправке, GitHub все равно выполнит проверку фиксаций на наличие секретов после отправки.
Удаление секрета, введенного последней фиксацией в ветви
Если заблокированный секрет был внесен последней фиксацией в вашей ветви, следуйте приведенным ниже инструкциям.
- Удалите секрет из кода.
- Чтобы зафиксировать изменения, выполните команду
git commit --amend
. Это обновляет исходную фиксацию, которая представила секрет вместо создания новой фиксации. - Отправьте изменения с помощью команды
git push
.
Удаление секрета, введенного более ранней фиксацией в ветви
Вы также можете удалить секрет, если он отображается в более ранней фиксации в журнале Git. Для этого необходимо определить, какая фиксация впервые представила секрет и изменить журнал фиксации с помощью интерактивной повторной базы.
-
Проверьте сообщение об ошибке, отображаемое при попытке отправить ветвь, в которой перечислены все фиксации, содержащие секрет.
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
-
Затем выполните команду
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
-
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.
- In the example, commit
-
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
.
- For
-
In the editor, choose to edit the commit identified in step 3 by changing
pick
toedit
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
-
Сохраните и закройте редактор, чтобы запустить интерактивную перебазу.
-
Удалите секрет из кода.
-
Зафиксируйте изменения с помощью
git commit --amend
. -
Выполните команду
git rebase --continue
, чтобы завершить перемещение изменений из одной ветви в другую. -
Отправьте изменения с помощью команды
git push
.
Как разрешить заблокированную фиксацию в пользовательском веб-интерфейсе
При использовании веб-интерфейса для фиксации поддерживаемого секрета в репозитории, защищенном защитой push-уведомлений, GitHub блокирует фиксацию.
Откроется диалоговое окно с информацией о расположении секрета, а также параметры, позволяющие отправить секрет. Секрет также будет подчеркнут в файле, чтобы его можно было легко найти.
Чтобы устранить заблокированную фиксацию в веб-интерфейсе, необходимо удалить секрет из файла. После удаления секрета вы сможете зафиксировать изменения.
Кроме того, если определить, что секрет безопасно разрешить, используйте параметры, отображаемые в диалоговом окне, для обхода защиты от отправки. Дополнительные сведения об обходе защиты push-уведомлений из веб-интерфейса см. в разделе "Отправка защиты для репозиториев и организаций".