30 formas de perder sus datos de GitHub (y cómo evitarlas)
GitHub es tan crítico para sus organizaciones como sus aplicaciones de producción más importantes. Es fundamental proteger su IP y su código fuente, pero eso no es todo lo que alberga GitHub. Los datos, configuraciones y archivos de GitHub impulsan a su equipo de desarrollo y a su empresa.
Pero a diferencia de alojar su repositorio Git en un centro de datos, utilizar GitHub como servicio requiere que piense de forma diferente sobre cómo protegerlo.
Hemos decidido desglosar las muchas formas en que los "datos" de GitHub pueden ser borrados, corrompidos o alterados.
Borrado accidental
1. Borrado de repositorios y ramas. Borrado de repositorios, ramas, archivos, etiquetas, releases
Es fácil borrar partes importantes de su proyecto con unos pocos clics o comandos. Ya se trate de un repositorio entero o de ese único archivo crítico, los borrados accidentales son una trampa común.
Consejo: Compruebe siempre dos veces antes de pulsar ese botón de borrado. Implemente reglas de protección de ramas y limite quién puede borrar repositorios.
2. Uso incorrecto de git rm y otros comandos
Utilizar git rm sin entender completamente su impacto puede llevar a la eliminación involuntaria de archivos. Combine eso con un commit apresurado, y tendrá una receta para perder código.
Consejo: Familiarícese con los comandos de Git y considere la posibilidad de poner alias a los comandos peligrosos para que requieran confirmación.
Force Push Errors: Un gran poder conlleva una gran responsabilidad
Uso inadecuado de git push --force
3. Forzar el push puede sobrescribir el historial remoto, borrando de hecho los commits de la existencia.
Consejo: Utilice git push --force-with-lease para añadir una red de seguridad, y evite forzar el push a ramas compartidas.
4. Reescribir la historia por error
Comandos como git rebase o git filter-branch seguidos de un force push pueden reescribir la historia compartida, confundiendo a los colaboradores y potencialmente perdiendo commits.
Consejo: Comuníquese con su equipo antes de reescribir el historial y considere alternativas como git merge cuando trabaje en colaboración.
Percances al fusionar: Cuando dos se convierten en uno... Badly
5. Operaciones de fusión incorrectas
Fusionar ramas sin resolver los conflictos adecuadamente puede descartar cambios importantes. Las fusiones rápidas pueden sobrescribir código que no tenía intención de cambiar.
Consejo: Revise siempre los conflictos de fusión cuidadosamente y considere el uso de pull requests para revisiones de código antes de fusionar.
Revertir fusiones sin precaución
Deshacer una confirmación de fusión sin entender sus implicaciones puede eliminar fragmentos significativos de código.
Consejo: Utilice git revert con precaución y asegúrese de que no está deshaciendo fusiones esenciales.
Errores en las fusiones: Los peligros de la mala gestión
6. Descuidar el push de ramas locales
Las ramas locales con trabajo crucial pueden desaparecer si su máquina se bloquea o si se olvida de enviarlas antes de trasladarse a un nuevo entorno.
Consejo: Envíe regularmente sus ramas al repositorio remoto y considere la posibilidad de utilizar los borradores de pull requests de GitHub para realizar un seguimiento.
Sobrescribir ramas
Crear una nueva rama con el mismo nombre que una existente y forzar el push puede borrar la rama original.
Consejo: Compruebe los nombres de las ramas cuidadosamente y evite forzar el push a menos que sea absolutamente necesario.
Catástrofes de credenciales: Ábrase Sésamo... al desastre
7. Acceso no autorizado y ataques de phishing
Si sus credenciales se ven comprometidas a través de phishing u otros medios, los atacantes pueden borrar o alterar sus repositorios.
Consejo:Habilite la autenticación de dos factores, utilice contraseñas fuertes y únicas, y esté atento a los intentos de phishing.
8. Exposición de tokens y claves SSH
La fuga de tokens de acceso o claves SSH puede dar a usuarios no autorizados las llaves de su reino.
Consejo: Almacene las credenciales de forma segura, rote los tokens con regularidad y considere la posibilidad de utilizar los secretos cifrados de GitHub para los datos sensibles.
Amenazas cibernéticas y de información privilegiada: La llamada viene de dentro
9. Empleados descontentos y bajas inadecuadas
Los antiguos miembros del equipo con acceso persistente pueden causar estragos, ya sea accidental o intencionadamente.
Consejo: Implemente procedimientos estrictos de baja y audite periódicamente los niveles de acceso del equipo.
10. Falta de controles de acceso
Los permisos inadecuados pueden provocar eliminaciones accidentales por parte de miembros del equipo bienintencionados.
Consejo:Utilice la configuración de permisos de GitHub para controlar quién puede enviar, fusionar o eliminar ramas y repositorios.
Anomalías de automatización: Robots Gone Rogue
11. Errores en los procesos CI/CD
Las secuencias de comandos automatizadas pueden eliminar o sobrescribir código debido a errores de configuración, convirtiendo sus útiles robots en fuerzas destructivas.
Consejo: Revise sus secuencias de comandos CI/CD cuidadosamente y pruébelas en un entorno seguro antes de desplegarlas.
12. Flujos de trabajo defectuosos y errores de programación. Flujos de trabajo defectuosos y permisos excesivos
Las acciones de GitHub con permisos excesivos pueden ejecutar borrados involuntarios si los scripts se tuercen.
Consejo: Siga el principio de mínimo privilegio al configurar los flujos de trabajo y utilice cuentas de servicio dedicadas siempre que sea posible.
Herramientas y comandos que se vuelven en su contra
13. Errores en los clientes de Git y errores en los scripts
Cuidado. Errores en los clientes Git y scripts mal configurados
Los errores de software o los scripts mal escritos pueden corromper su repositorio o borrar datos de forma inesperada.
Consejo: Mantenga sus herramientas actualizadas y compruebe dos veces los scripts antes de ejecutarlos en repositorios importantes.
14. Comandos Git peligrosos. Comandos Git peligrosos
Comandos como git clean -fdx pueden eliminar archivos y directorios no rastreados, a veces con efectos desastrosos.
Consejo: Utilice estos comandos con precaución y considere la posibilidad de ejecutarlos primero con la opción -n (ejecución en seco).
Conjeturas de corrupción de datos: Cuando los bits se estropean
15. Repositorios corruptos
Los problemas de red durante las operaciones push/pull pueden corromper su repositorio, haciendo que los datos sean inaccesibles.
Consejo: Realice copias de seguridad periódicas de sus repositorios y utilice las herramientas de recuperación integradas en Git cuando sea necesario.
16. Problemas con archivos binarios y Git LMS. Problemas con archivos binarios y mala gestión de Git LFS
Comitir archivos binarios de gran tamaño sin Git LFS puede provocar problemas de rendimiento. Borrar objetos LFS de forma incorrecta puede hacer que los archivos grandes sean inaccesibles.
Consejo:Utilice Git LFS para archivos grandes y sea consciente de las cuotas y límites de almacenamiento.
Calamidades de la configuración: Setting Yourself Up for Failure
17. Configuración incorrecta de los repositorios
Una configuración incorrecta puede provocar la exposición o el borrado involuntario de datos.
Consejo: Revise regularmente la configuración de sus repositorios, especialmente cuando los cambios son realizados por varios administradores.
18. Reglas de protección de sucursales mal aplicadas. Reglas de protección de ramas mal aplicadas
Unas reglas demasiado permisivas podrían permitir forzar empujes o eliminaciones que no había previsto.
Consejo: Establezca reglas estrictas de protección de ramas para las ramas principales y haga cumplir las revisiones requeridas.
Los peligros del almacenamiento temporal y las acciones basadas en el tiempo
19. Pérdida de trabajo no sincronizado
Los peligros del almacenamiento temporal y las acciones basadas en el tiempo
19. Pérdida de trabajo no sincronizado. Pérdida de trabajo no sincronizado
Los datos almacenados en ubicaciones temporales o el trabajo no guardado pueden desaparecer debido a caídas del sistema u operaciones de limpieza.
Consejo: Guarde el trabajo con frecuencia y envíe los cambios a las ramas remotas a menudo.
20. Trabajos programados que salen mal Trabajos programados que salen mal
Los trabajos de cron o las tareas programadas pueden borrar datos involuntariamente si están mal configurados.
Consejo: Supervise las tareas programadas y asegúrese de que funcionan según lo previsto, especialmente cuando se trate de borrados.
Pifias con los submódulos y la sincronización
21. Gestión incorrecta de los submódulos Git Gestión incorrecta de submódulos Git
La eliminación incorrecta de submódulos o la extracción de actualizaciones pueden sobrescribir los cambios locales.
Consejo: Entienda cómo funcionan los submódulos antes de utilizarlos y documente su uso para su equipo.
22. Conflictos con otras herramientas VCS. Conflictos con otras herramientas VCS y servicios de sincronización
Utilizar varios sistemas de control de versiones o sincronizar repositorios con servicios en la nube puede provocar daños.
Consejo: Limítese a un VCS por proyecto y evite sincronizar las carpetas de los repositorios con servicios como Dropbox.
Espejo, espejo en la pared: Los peligros de una réplica incorrecta de repositorios
23. Utilizar comandos como git push --mirror sin la precaución adecuada puede sobrescribir todo el repositorio de destino, borrando ramas, etiquetas e historial de confirmaciones de un solo golpe.
Consejo: Antes de realizar un mirror push, compruebe dos veces sus URLs remotas utilizando git remote -v para asegurarse de que está realizando un push al repositorio correcto. Evite utilizar --mirror a menos que esté seguro de que esa es su intención. Para la mayoría de los casos, un git push normal será suficiente. Considere la posibilidad de establecer salvaguardas o utilizar secuencias de comandos que le pidan confirmación antes de ejecutar operaciones destructivas.
Caos en la codificación de caracteres y conflictos de fusión
24. Codificación y conflictos de fusión.
24. Desajustes en la codificación
Una codificación de caracteres inconsistente puede corromper el contenido de los archivos, especialmente en entornos colaborativos.
Consejo: Estandarice la codificación en todo su equipo y utilice herramientas para detectar problemas de codificación.
25. Conflictos de fusión sin resolver
Cómo evitarlos Conflictos de fusión no resueltos
Comprometer archivos con marcadores de conflicto o descartar accidentalmente las secciones de código equivocadas puede dar lugar a un código roto
Consejo: Resuelva cuidadosamente los conflictos y considere la posibilidad de revisar el código para detectar cualquier error.
Desafíos de la clonación y el cherry-picking
26. Clones superficiales y parciales
Dificultades
Dificultades de la clonación y el cherry-picking. Clones superficiales y parciales
Utilizar git clone --depth u olvidarse de clonar los submódulos y objetos LFS puede dar como resultado repositorios incompletos.
Consejo: Clone los repositorios por completo a menos que tenga una razón específica para no hacerlo, y asegúrese de que se incluyen todos los componentes necesarios.
27. Clonación incompleta y parcial
Dificultades en la clonación. Uso incorrecto de git cherry-picky git revert
Aplicar commits fuera de contexto o revertir incorrectamente los cambios puede causar conflictos y sobrescribir código.
Consejo:Utilice estos comandos con precaución y comprenda perfectamente los commits que está manipulando.
--
Lista de comprobación: Pautas para proteger GitHub
Aunque hemos destacado una plétora de formas de perder sus datos de GitHub, el tema subyacente es claro: los errores ocurren. Ya sea un borrado, un comando mal entendido o un script mal configurado, sus datos siempre están en riesgo.
Proteger sus datos de GitHub es crucial para mantener la integridad, disponibilidad y confidencialidad de su código y activos relacionados. A continuación encontrará una breve lista de las mejores prácticas para ayudarle a salvaguardar sus repositorios de GitHub de forma eficaz.
Refuerce los métodos de autenticación
- Habilite el inicio de sesión único (SSO):Integre GitHub con el proveedor de identidad (IdP) de su organización para centralizar la autenticación.
- Exija la autenticación de dos factores (2FA): Exija 2FA a todos los usuarios para añadir una capa adicional de seguridad. Prefiera las contraseñas de un solo uso basadas en el tiempo (TOTP) o las claves de seguridad de hardware a la 2FA basada en SMS.
Control de acceso
- Principio del mínimo privilegio: Conceda a los usuarios los permisos mínimos necesarios para sus funciones. Revise y actualice periódicamente los derechos de acceso.
- Control de acceso basado en roles (RBAC): Defina roles (por ejemplo, admin, developer, tester) y asigne permisos en consecuencia.
- Utilice GitHub Teams para gestionar los permisos de grupo.
- Proteja las ramas críticas. Habilite reglas de protección de ramas para evitar pushs y borrados forzados y exija comprobaciones de estado y revisiones de código antes de fusionar.
- Gestione a los colaboradores externos: Limite el acceso de los colaboradores externos y establezca fechas de caducidad para el acceso de los colaboradores cuando proceda.
Asegure las credenciales y los datos confidenciales
- Evite el envío de secretos: Utilice herramientas como GitGuardian o GitHub Secret Scanning para detectar secretos en el código. Implemente ganchos de precompromiso para evitar la consignación accidental de datos confidenciales.
- Utilice los secretos de GitHub: Almacene las claves API, los tokens y las contraseñas de forma segura en los secretos de GitHub para Acciones y Dependabot.
- Rotee las credenciales periódicamente: Cambie los tokens de acceso, las claves SSH y las contraseñas periódicamente. Asegúrese de invalidar inmediatamente las credenciales comprometidas.
Copias de seguridad y recuperación
- Copias de seguridad automatizadas: Programe copias de seguridad periódicas de los repositorios, incluidas todas las ramas, etiquetas y ediciones
- Almacenamiento externo: Almacene las copias de seguridad en ubicaciones seguras y geográficamente separadas. Cifre los datos de las copias de seguridad tanto en tránsito como en reposo.
- Copias de seguridad habilitadas para WORM: Aproveche los objetivos de almacenamiento en nubes públicas y el bloqueo de objetos para mantener una copia segura en caso de un evento cibernético.
- Pruebe los procedimientos de restauración: Verifique periódicamente que las copias de seguridad pueden restaurarse con éxito. Documente los pasos de recuperación y manténgalos actualizados.
Conclusión: Asuma la propiedad de sus datos de GitHub
GitHub es más que una plataforma: es el latido del corazón de los esfuerzos de desarrollo de su organización, albergando no sólo código sino la propiedad intelectual y el trabajo colaborativo que impulsan sus proyectos. Si bien GitHub proporciona las herramientas y la infraestructura, la responsabilidad de proteger los datos dentro de sus repositorios recae en usted.
Desarrollar teniendo en cuenta la seguridad y la protección de datos no se trata sólo de evitar pérdidas, sino de fomentar una cultura de concienciación y diligencia. Al integrar estas prácticas en su flujo de trabajo diario, crea un entorno resistente en el que la innovación puede prosperar sin comprometer la integridad.
Asuma hoy mismo la propiedad de sus datos de GitHub. Al hacerlo, no solo protegerá los valiosos activos de su organización, sino que también reforzará los cimientos sobre los que su equipo podrá construir, colaborar y tener éxito durante mucho tiempo.
Cuide sus datos en GitHub hoy mismo.