Open Code Review: alcance, filtros y llamadas al modelo
Leer el filtro .env y comprobar sus límites
Quince casos Go aislados explican las excepciones de plantillas y la diferencia entre una función de nombres y el filtro completo de rutas secretas.
Qué aprenderás
- Sigue al llamador antes de interpretar la función
- Ejecuta una parte pequeña del código real
- Respeta el alcance de una comprobación de nombres
Antes de empezar
- Cambios Git y comparación desde merge-base
- Uso básico de CLI y credenciales de modelos
Elegir el alcance, explicar exclusiones y preparar una prueba controlada distinguiendo inspección y ejecución.
Conclusiones clave
- La función tiene tres excepciones exactas de plantilla.
- Otros patrones pueden rechazar la ruta de una plantilla.
- Los quince casos no escanean contenidos.
Sigue al llamador antes de interpretar la función
IsSecretPath convierte la ruta a minúsculas, comprueba la familia .env y después evalúa patrones glob incorporados. La función auxiliar utiliza path.Base, permite exactamente .env.example, .env.sample y .env.template, y rechaza .env y otros nombres que empiezan por .env.
La función auxiliar devuelve false para .ssh/.env.example porque reconoce la plantilla. IsSecretPath continúa con sus otros patrones. La prueba upstream espera rechazar esa ruta por encontrarse dentro de .ssh. Interpretar solamente el nombre base perdería esa diferencia.
Ejecuta una parte pequeña del código real
El fixture extrae la función upstream inspeccionada isSecretEnvPath y la compila con la biblioteca estándar de Go. Los quince casos incluyen nombres anidados, plantillas, .env.example.secret, mayúsculas en la entrada del llamador y una barra final. Todos pasaron en la ejecución local.
El fixture aplica strings.ToLower para reproducir el contrato del llamador. No importa la dependencia de globs ni ejecuta el selector completo. Describirlo como auditoría de seguridad excedería lo probado. El informe conserva el hash del código y cada valor esperado.
Respeta el alcance de una comprobación de nombres
El código indica expresamente que IsSecretPath no inspecciona contenidos. Un archivo con nombre corriente puede contener una credencial, y una plantilla puede incluir valores reales. Revisa la política de datos antes de enviar contenido seleccionado a un proveedor.
Un resultado false tampoco implica que el archivo vaya a revisarse: todavía pueden excluirlo reglas de extensión, rutas predeterminadas y comprobaciones posteriores. Otra regla de secretos puede rechazar una ruta admitida por esta función auxiliar, como ocurre con la plantilla dentro de .ssh.
Cómo elegir
| Criterio | Opción A | Opción B |
|---|---|---|
| Best when | You need predictable behavior and easy auditing | You need adaptive optimization and have reliable telemetry |
| Main risk | May leave performance on the table | Can become difficult to explain or debug |
Pasos de implementación
- 1
Inspecciona llamador, función auxiliar y pruebas antes de interpretar el resultado.
- 2
Ejecuta el fixture aislado con nombres sintéticos.
- 3
Separa las pruebas del selector completo y la búsqueda de secretos en contenidos.
Ejemplo para copiar
// SPDX-License-Identifier: Apache-2.0
// Copyright 2026 alibaba/open-code-review Contributors
// Imports: path, strings. Input: strings.ToLower(filePath).
func isSecretEnvPath(lowerPath string) bool {
base := path.Base(lowerPath)
switch base {
case ".env.example", ".env.sample", ".env.template":
return false
}
return base == ".env" || strings.HasPrefix(base, ".env.")
}Preguntas frecuentes
¿.env.example siempre llega al modelo?
No. Se aplican otros filtros de secretos y selección. Su nombre tampoco demuestra qué valores contiene.
¿Por qué .ssh/.env.example devuelve false en el fixture?
El fixture solo prueba el nombre base. La función completa puede rechazar el directorio mediante un glob posterior.
Fuentes
- Open Code Review / internal/config/allowlist/secret_path.goFuente verificada 2026-09-18
- Open Code Review / internal/config/allowlist/secret_path_test.goFuente verificada 2026-09-18
- Open Code Review / internal/agent/selection.goFuente verificada 2026-09-18