Сведения о принудительной защите от командной строки
Защита от отправки предотвращает случайное фиксацию секретов в репозитории путем блокировки push-уведомлений, содержащих поддерживаемые секреты.
При попытке отправить поддерживаемый секрет из командной строки в репозиторий, защищенный защитой push-уведомлений, GitHub блокирует отправку.
Необходимо выполнить следующие действия:
- Удалите секрет из ветви. Дополнительные сведения см. в разделе "Разрешение заблокированной отправки".
- Следуйте предоставленному URL-адресу для разрешения отправки. Дополнительные сведения см. в разделе "Обход принудительной защиты.
В командной строке будет отображаться до пяти обнаруженных секретов. Если определенный секрет уже обнаружен в репозитории и оповещение уже существует, GitHub не заблокирует этот секрет.
Если вы подтверждаете, что секрет является реальным и что вы планируете исправить его позже, постарайтесь как можно скорее исправить секрет. Например, можно отозвать секрет и удалить его из журнала фиксаций репозитория. Реальные секреты, которые отображаются, необходимо отозвать для предотвращения несанкционированного доступа. Прежде чем отзывать секрет, можно сначала сменить его. Дополнительные сведения см. в разделе Удаление конфиденциальных данных из репозитория.
Note
- Если конфигурация Git поддерживает отправку в несколько ветвей, а не только в текущую ветвь, отправка может быть заблокирована из-за дополнительных и непреднамеренных ссылок. Дополнительные сведения см. в разделе Параметры
push.default
в документации Git. - Если истечет время ожидания secret scanning при отправке, GitHub все равно выполнит проверку фиксаций на наличие секретов после отправки.
Разрешение заблокированной отправки
Чтобы устранить заблокированную отправку, необходимо удалить секрет из всех фиксаций, в которые он отображается.
- Если секрет был введен вашей последней фиксацией, см. раздел "Удаление секрета", введенного последней фиксацией в вашей ветви.
- Если секрет отображается в предыдущих фиксациях, см . раздел "Удаление секрета, введенного более ранней фиксацией в ветви".
Note
Сведения о том, как устранить заблокированную фиксацию в пользовательском интерфейсе GitHub см. в разделе Работа с защитой push-уведомлений в пользовательском интерфейсе GitHub.
Удаление секрета, введенного последней фиксацией в ветви
Если заблокированный секрет был внесен последней фиксацией в вашей ветви, следуйте приведенным ниже инструкциям.
- Удалите секрет из кода.
- Чтобы зафиксировать изменения, выполните команду
git commit --amend --all
. Это обновляет исходную фиксацию, которая представила секрет вместо создания новой фиксации. - Отправьте изменения с помощью команды
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 add .
.Note
Полная команда:
git add .
- Существует пространство между
add
и.
. - Период после пробела является частью команды.
- Существует пространство между
-
Зафиксируйте изменения с помощью
git commit --amend
. -
Выполните команду
git rebase --continue
, чтобы завершить перемещение изменений из одной ветви в другую. -
Отправьте изменения с помощью команды
git push
.
Обход защиты от принудительной отправки
Если GitHub блокирует секрет, который вы считаете безопасным для отправки, то может обойти блок, указав причину для отправки секрета.
При отправке секрета на вкладке "Безопасность **" создается **оповещение. GitHub закрывает оповещение и не отправляет уведомление, если указать, что секрет является ложным срабатыванием или используется только в тестах. Если указать, что секрет является реальным и что вы исправите это позже, GitHub оставит оповещение системы безопасности открытым и отправит уведомления автору фиксации, а также администраторам репозитория. Дополнительные сведения см. в разделе Управление оповещениями о проверке секретов.
Если участник обходит защитную блокировку push-передачи для секрета, GitHub также отправляет оповещение по электронной почте владельцам организации, менеджерам по безопасности и администраторам репозиториев, которые выбрали получение таких оповещений.
Если вы не видите возможность обойти блок, администратор репозитория или владелец организации настроил более жесткие элементы управления вокруг защиты push-уведомлений. Вместо этого необходимо удалить секрет из фиксации или отправить запрос на "обход привилегий" для отправки заблокированного секрета. Дополнительные сведения см. в статье "Запрос привилегий обхода" в документации по GitHub Enterprise Cloud .
-
Посетите URL-адрес, возвращенный GitHub при блокировке отправки. 1. Выберите вариант ответа, который наиболее точно описывает, почему у вас должна быть возможность отправлять секрет.
- Если секрет используется только в тестах и не представляет угрозы, нажмите Используется в тестах.
- Если обнаруженная строка не является секретом, нажмите Ложноположительный результат.
- Если секрет реальный, но вы планируете исправить его позднее, нажмите Исправлю позже.
-
Щелкните Разрешить мне отправить этот секрет.
-
Повторите попытку отправки с помощью командной строки в течение трех часов. Если вы не выполнили отправку в течение трех часов, необходимо повторить этот процесс.