Acerca de la protección de inserción
La protección de inserción ayuda a evitar pérdidas de seguridad mediante la búsqueda de secretos antes de insertar los cambios en el repositorio.
Al intentar insertar un secreto en un repositorio protegido mediante la protección de inserción, GitHub bloquea la inserción. Debe quitar el secreto de la rama antes de volver a insertarlo. Para obtener más información sobre cómo resolver una inserción bloqueada, vea "Resolución de una inserción bloqueada en la línea de comandos" y "Resolución de una confirmación bloqueada en la interfaz de usuario web" en este artículo.
Si cree que es seguro permitir el secreto, tiene la opción de omitir la protección. Para obtener más información, vea "Permitir que se inserte un secreto bloqueado" y "Omitir la protección de inserción para un secreto".
Para más información sobre los secretos y los proveedores de servicios admitidos para la protección de inserción, consulta "Patrones de análisis de secretos".
Resolución de una inserción bloqueada en la línea de comandos
Al intentar insertar un secreto admitido en un repositorio asegurado por protección de inserción GitHub bloqueará la inserción. Puedes quitar el secreto de la rama o seguir una dirección URL proporcionada para permitir la inserción.
Notas:
- Si su configuración de Git admite inserciones en varias ramas y no solo en la actual, es posible que se bloquee la inserción debido a que se insertan referencias adicionales y no deseadas. Para obtener más información, consulta las opciones
push.default
en la documentación de Git. - Si se agota el tiempo de espera de secret scanning tras una inserción, GitHub todavía examinará las confirmaciones en busca de secretos después de la inserción.
Eliminación de un secreto introducido por la confirmación más reciente en la rama
Si el secreto bloqueado se introdujo con la confirmación más reciente en la rama, puedes seguir las instrucciones a continuación.
- Quita el secreto del código.
- Para confirmar los cambios, ejecute
git commit --amend
. Esto actualiza la confirmación original que introdujo el secreto en lugar de crear una nueva confirmación. - Envía los cambios con
git push
.
Eliminación de un secreto introducido por una confirmación anterior en la rama
También puedes quitar el secreto si aparece en una confirmación anterior en el historial de Git. Para ello, deberá identificar qué confirmación introdujo primero el secreto y modificar el historial de confirmaciones con una fusión mediante cambio de base interactiva.
-
Examine el mensaje de error que se muestra al intentar insertar la rama, que enumera todas las confirmaciones que contienen el secreto.
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
-
A continuación, ejecute
git log
para ver un historial completo de todas las confirmaciones de la rama, junto con sus marcas de tiempo correspondientes.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
-
Ahora, guarde y cierre el editor; esto comenzará la fusión mediante cambio de base interactiva.
-
Quita el secreto del código.
-
Confirme los cambios con
git commit --amend
. -
Ejecuta
git rebase --continue
para finalizar la fusión mediante cambio de base. -
Envía los cambios con
git push
.
Resolución de una confirmación bloqueada en la interfaz de usuario web
Cuando se usa la interfaz de usuario web para intentar confirmar un secreto admitido en un repositorio asegurado mediante la protección de inserción GitHub bloqueará la confirmación.
Verás un cuadro de diálogo con información sobre la ubicación del secreto, así como opciones que te permiten insertarlo. El secreto también estará subrayado en el archivo para que puedas encontrarlo fácilmente.
Para resolver una confirmación bloqueada en la interfaz de usuario web, debe eliminar el secreto del archivo. Una vez que quites el secreto, puedes confirmar los cambios.
Como alternativa, si determina que es seguro permitir el secreto, use las opciones que se muestran en el cuadro de diálogo para omitir la protección de inserción. Para más información sobre cómo omitir la protección de inserción de la interfaz de usuario web, consulta "Protección contra el envío de cambios para repositorios y organizaciones".