Skip to main content

Работа с принудительной защитой из командной строки

Узнайте, как разблокировать отправку из командной строки на GitHub, если secret scanning обнаруживает секрет в изменениях.

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

Пользователи с доступом на запись

Сведения о принудительной защите от командной строки

Защита от отправки предотвращает случайное фиксацию секретов в репозитории путем блокировки push-уведомлений, содержащих поддерживаемые секреты.

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

Необходимо выполнить следующие действия:

В командной строке будет отображаться до пяти обнаруженных секретов. Если определенный секрет уже обнаружен в репозитории и оповещение уже существует, GitHub не заблокирует этот секрет.

Если вы подтверждаете, что секрет является реальным и что вы планируете исправить его позже, постарайтесь как можно скорее исправить секрет. Например, можно отозвать секрет и удалить его из журнала фиксаций репозитория. Реальные секреты, которые отображаются, необходимо отозвать для предотвращения несанкционированного доступа. Прежде чем отзывать секрет, можно сначала сменить его. Дополнительные сведения см. в разделе Удаление конфиденциальных данных из репозитория.

Note

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

Разрешение заблокированной отправки

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

Note

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

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

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

  1. Удалите секрет из кода.
  2. Чтобы зафиксировать изменения, выполните команду git commit --amend --all. Это обновляет исходную фиксацию, которая представила секрет вместо создания новой фиксации.
  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 add ..

    Note

    Полная команда:git add .

    • Существует пространство между add и ..
    • Период после пробела является частью команды.
  9. Зафиксируйте изменения с помощью git commit --amend.

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

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

Обход защиты от принудительной отправки

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

При отправке секрета на вкладке "Безопасность **" создается **оповещение. GitHub закрывает оповещение и не отправляет уведомление, если указать, что секрет является ложным срабатыванием или используется только в тестах. Если указать, что секрет является реальным и что вы исправите это позже, GitHub оставит оповещение системы безопасности открытым и отправит уведомления автору фиксации, а также администраторам репозитория. Дополнительные сведения см. в разделе Управление оповещениями о проверке секретов.

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

Если вы не видите возможность обойти блок, администратор репозитория или владелец организации настроил более жесткие элементы управления вокруг защиты push-уведомлений. Вместо этого необходимо удалить секрет из фиксации или отправить запрос на "обход привилегий" для отправки заблокированного секрета. Дополнительные сведения см. в статье "Запрос привилегий обхода" в документации по GitHub Enterprise Cloud .

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

    • Если секрет используется только в тестах и не представляет угрозы, нажмите Используется в тестах.

    • Если обнаруженная строка не является секретом, нажмите Ложноположительный результат.

    • Если секрет реальный, но вы планируете исправить его позднее, нажмите Исправлю позже.

    Note

    Необходимо указать причину обхода принудительной защиты, если в репозитории включена проверка секретов.

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

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

  2. Щелкните Разрешить мне отправить этот секрет.

  3. Повторите попытку отправки с помощью командной строки в течение трех часов. Если вы не выполнили отправку в течение трех часов, необходимо повторить этот процесс.

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