
Hook local de Git pre-push y escáner de sistema de archivos que detecta posibles filtraciones de secretos, redacta los valores coincidentes y bloquea los pushes sin telemetría ni acceso a la red.
Push Guard es una protección local de Git pre-push para posibles filtraciones de secretos.
Escanea el contenido que se está subiendo, informa de posibles patrones de secretos, redacta todos los valores coincidentes y finaliza con un código distinto de cero para que Git bloquee el push.
Creado y mantenido por Dragon Lady - github.com/Dragon-Lady - X: @answerislove2
La versión 0.4.3 elimina la excepción en línea # push-guard: ignore. Una actualización puede empezar a bloquear pushes y paquetes que antes pasaban. Antes de actualizar hooks compartidos o instalaciones de CI, inspecciona cada repositorio consumidor:
git grep -n -i 'push-guard:[[:space:]]*ignore'
Revisa cada coincidencia. Elimina los secretos y el material privado; ninguno de los dos puede eximirse.
Para fixtures legítimos de flujos de trabajo/IOC, añade únicamente la ruta exacta del repositorio revisada y los IDs de regla exactos de workflow.* a .push-guard-allow. Los marcadores en línea ahora son texto normal, incluidos los de pruebas o documentación. No conviertas automáticamente todas las líneas de marcador en exenciones. Revisa cualquier nueva exención como un cambio sensible para la seguridad.
El hook de pre-push lee las excepciones del commit base anunciado del destino, nunca de la copia de trabajo ni de los commits candidatos. Una exención nueva o ampliada debe revisarse y establecerse por separado antes de que pueda eximir un push posterior. Para un push de múltiples refs, solo se aplican las excepciones compartidas por todas las bases de destino. Las refs nuevas sin una base anunciada no reciben excepciones.
scan también lee la política de --base. Al auditar un rango histórico más amplio contra una instantánea de política revisada por separado, pasa explícitamente --allow-list-ref <reviewed-40-character-commit-SHA>. Esta es una decisión de confianza explícita por parte del llamador; nunca sustituyas la política del candidato no revisado. scan-package sigue usando la política --repo seleccionada por el llamador, fuera del artefacto. Proporciona un directorio de política revisado al escanear compilaciones no confiables.
Ejecuta push-guard scan --base <trusted-base> --head HEAD y push-guard scan-package dist/* de la nueva versión contra los cambios salientes reales y los artefactos compilados antes de actualizar el hook instalado. Las rutas de los miembros del archivo pueden diferir de las rutas de origen; revisa esas rutas exactas por separado. Mantén la versión instalada existente hasta que los repositorios afectados hayan completado esta migración.
Página de aterrizaje pública: push-guard.netlify.app
La página de aterrizaje estática del proyecto reside en docs/ y no tiene dependencias en tiempo de ejecución, scripts externos, analíticas ni recursos remotos. Puede servirse con GitHub Pages desde el directorio docs/ o desplegarse en Netlify usando el netlify.toml incluido (sin comando de compilación; directorio de publicación docs).
El proyecto actual de Netlify usa despliegues manuales. Un push de Git por sí solo no actualiza la página pública: publica el contenido de docs/ después de cada versión y verifica la versión en vivo, la imagen social y las cabeceras de respuesta. El archivo docs/_headers mantiene las cabeceras de seguridad al desplegar ese directorio directamente.
--send de Sweep habilita alertas agregadas a destinos configurados; el guard de Git permanece sin conexión.git solo para leer diffs de commits, árboles enviados, rutas de hooks configuradas y metadatos de ignorados. Se preserva el punto de entrada del hook existente, con la inspección de contenido sin procesar y del historial saliente reforzada.$HOME, y no ejecuta procesos hijos, incluido Git.$XDG_STATE_HOME/push-guard-sweep/fp.key (por defecto ~/.local/state/push-guard-sweep/fp.key) para huellas digitales estables y no adivinables. Esta clave es la excepción explícita a «no se almacenan datos por defecto». No contiene datos escaneados. El directorio de estado tiene permisos 0700 y los archivos se crean con 0600.--baseline y --output de Sweep contienen metadatos locales redactados; --send almacena recibos de deduplicación con clave, nunca credenciales de alerta ni secretos.Bloquear un push es la respuesta de Git al aviso. Push Guard permanece de solo lectura y no modifica archivos. La anulación está disponible con git push --no-verify cuando se sabe que el valor coincidente no es un secreto.
El comando push-guard sweep y el alias push-guard-sweep proporcionan la misma inspección local. Requieren el Python 3.11 o superior del paquete existente y no tienen dependencias de tiempo de ejecución adicionales. Las pruebas de desarrollo utilizan el extra opcional test (python -m pip install ".[test]", luego PYTHONPATH=src python -m pytest -q desde la raíz del repositorio). La versión 0.4.0 añade Sweep. CI instala ese extra de desarrollo y ejecuta toda la suite de pytest, incluidos los casos heredados de unittest. Las pruebas de lanzamiento se ejecutan en un trabajo separado; ese trabajo nunca proporciona artefactos de distribución a la publicación. El trabajo de compilación de artefactos no instala dependencias de prueba. Sweep no instala ni habilita un planificador.
push-guard sweep --list-targets
push-guard sweep --roots ~/projects --class stray
push-guard-sweep --format json --output ~/sweep-report.json
push-guard-sweep --baseline ~/sweep-baseline.json
push-guard-sweep report --format html --output ~/sweep-report.html
push-guard-sweep print-timer --interval 7d
Cada escaneo también considera las ubicaciones predeterminadas de historial, dotfiles, configuración y registros que se indican a continuación. --roots cambia las raíces de búsqueda de .env* y de inclusión personalizada; use --exclude para acotar los demás conjuntos predeterminados. La repetición de --include GLOB añade archivos dentro de las búsquedas acotadas existentes, y la repetición de --exclude GLOB elimina rutas. Los globs coinciden con nombres base, rutas relativas a HOME o rutas absolutas. Las exclusiones prevalecen; las inclusiones no pueden anular las exclusiones de seguridad ni los límites de profundidad. ~ en los argumentos de ruta de la CLI se expande. Las rutas escaneadas deben permanecer dentro de $HOME.