Acerca de la protección de inserción desde la línea de comandos
La protección de inserción impide que los secretos se confirmen accidentalmente en un repositorio mediante el bloqueo de las inserciones que contienen secretos admitidos.
Al intentar insertar un secreto admitido desde la línea de comandos en un repositorio protegido por la protección de inserción, GitHub bloqueará la inserción.
Debes hacer una de estas cosas:
- Elimina el secreto de la rama. Para obtener más información, consulta "Resolución de una inserción bloqueada".
- Sigue una dirección URL proporcionada para permitir la inserción. Para obtener más información, consulta "Omisión de la protección de inserción".
En la línea de comandos se mostrarán hasta cinco secretos detectados a la vez. Si ya se ha detectado un secreto determinado en el repositorio y ya existe una alerta, GitHub no bloqueará ese secreto.
Si confirma que un secreto es real y que pretende corregirlo más adelante, debe intentar corregirlo lo antes posible. Por ejemplo, podría revocar el secreto y quitarlo del historial de confirmaciones del repositorio. Los secretos reales que se han expuesto deben revocarse para evitar el acceso no autorizado. Puede considerar la posibilidad de rotar primero el secreto antes de revocarlo. Para obtener más información, vea «Eliminación de datos confidenciales de un repositorio».
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.
Resolución de una inserción bloqueada
Para resolver una inserción bloqueada, debes quitar el secreto de todas las confirmaciones en las que aparece.
- Si la confirmación más reciente introdujo el secreto, consulta "Eliminación de un secreto introducido por la confirmación más reciente en la rama".
- Si el secreto aparece en confirmaciones anteriores, consulta "Eliminación de un secreto introducido por una confirmación anterior en la rama".
Note
Para obtener información sobre cómo resolver una confirmación bloqueada en la interfaz de usuario de GitHub, consulta "Trabajar con protección de inserción en la interfaz de usuario de GitHub".
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
.
Omisión de la protección de inserción
Si GitHub bloquea un secreto que cree que es seguro insertar, puede omitir el bloque especificando un motivo para permitir que se inserte el secreto.
Cuando permites la inserción de un secreto, se crea una alerta en la pestaña Seguridad. GitHub cierra la alerta y no envía una notificación si especificas que el secreto es un falso positivo o que solo se usa en las pruebas. Si especificas que el secreto es real y lo corregirás más adelante, GitHub mantiene abierta la alerta de seguridad y envía notificaciones al creador de la confirmación, así como a los administradores del repositorio. Para obtener más información, vea «Administración de alertas del examen de secretos».
Cuando un colaborador omite un bloque de protección de inserción para un secreto, GitHub también envía una alerta por correo electrónico a los propietarios de la organización, los administradores de seguridad y los administradores de repositorios que han optado por recibir notificaciones por correo electrónico.
Si no ve la opción de omitir el bloque es porque el administrador del repositorio o el propietario de la organización ha configurado controles más estrictos en torno a la protección de inserción. En su lugar, debe eliminar el secreto de la confirmación o enviar una solicitud de "privilegios de omisión" para insertar el secreto bloqueado. Para obtener más información, consulta "Solicitud de privilegios de omisión" en la documentación de GitHub Enterprise Cloud.
-
Visite la dirección URL devuelta por GitHub cuando se bloquee la inserción.
-
Elija la opción que mejor describa por qué debería poder insertar el secreto.
- Si el secreto solo se usa en pruebas y no supone ninguna amenaza, haga clic en Se usa en las pruebas.
- Si la cadena detectada no es un secreto, haga clic en Es un falso positivo.
- Si el secreto es real, pero piensa corregirlo más adelante, haga clic en Lo corregiré más adelante.
Nota: Debe especificar un motivo para omitir la protección de inserción si el repositorio tiene habilitado el examen de secretos.
Al insertar en un repositorio público que no tiene habilitado el análisis de secretos, todavía está protegido de la inserción accidental de secretos gracias a la protección de inserción para usuarios, que está activado de manera predeterminada para su cuenta de usuario.
Con la protección de inserción para usuarios, GitHub bloqueará automáticamente las inserciones en repositorios públicos si estas inserciones contienen secretos admitidos, pero no es necesario especificar un motivo para permitir el secreto y GitHub no generará una alerta. Para obtener más información, vea «Protección de inserción para usuarios».
-
Haga clic en Permitirme insertar este secreto.
-
Vuelva a intentar la inserción en la línea de comandos en un plazo de tres horas. Si no ha realizado la inserción en un plazo de tres horas, tendrá que repetir este proceso.