Skip to main content

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

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

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

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

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

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

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

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

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

  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 ..

    Примечание.

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

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

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

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

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

Примечание.

Если вы не видите возможности обойти блокировку, следует удалить секрет из коммита или отправить запрос на «обход прав», чтобы продвинуть заблокированный секрет. См. раздел «Запрос прав на обход».

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

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

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

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

    Примечание.

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

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

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

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

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

Запрос привилегий обхода

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

  2. В разделе "Или обход привилегий обхода запросов" добавьте комментарий. Например, можно объяснить, почему вы считаете, что секрет безопасн для отправки, или укажите контекст о запросе для обхода блока.

  3. Нажмите кнопку "Отправить запрос".

  4. Проверьте Уведомления по электронной почте ответа на запрос. После проверки запроса вы получите сообщение электронной почты, уведомляющее вас о решении.

    • Если ваш запрос одобрен, вы можете отправить коммит (или коммиты), содержащие секрет, в репозиторий, а также любые будущие коммиты с таким же секретом.
    • Если ваш запрос отклонён, нужно удалить секрет из всех коммитов перед повторным продвижением. Сведения о том, как удалить заблокированный секрет, см. в разделе "Разрешение заблокированной отправки".

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

  •         [AUTOTITLE](/code-security/secret-scanning/working-with-secret-scanning-and-push-protection/working-with-push-protection-in-the-github-ui)
    
  •         [AUTOTITLE](/code-security/secret-scanning/working-with-secret-scanning-and-push-protection/working-with-push-protection-from-the-rest-api)