Auditoría de código: [Nombre del proyecto]
Sustituye todo lo que está entre [corchetes]. Marca una línea solo cuando hayas visto la evidencia tú mismo. Lo que falle se convierte en un hallazgo numerado en el registro final, y la auditoría se aprueba solo cuando no quedan hallazgos críticos ni altos abiertos y el producto está en producción.
01Alcance
Fija exactamente qué se audita. Una auditoría de «la app» sin un commit concreto no se puede repetir.
- Repositorio: [URL]
- Commit o tag: [SHA o etiqueta de versión]
- Alcance acordado: [Versión del PRD o número de línea base contra el que se audita]
- Entorno: [URL de producción, build de tienda o staging]
- Auditor y fecha: [Nombre], [fecha]
02Cobertura de requisitos
¿Coincide lo construido con lo acordado? Repasa los requisitos uno a uno frente al alcance congelado.
- Cada requisito Must tiene criterios de aceptación
- Cada requisito Must tiene trabajo terminado que apunta a él
- Cada comprobación de aceptación se cumple en el producto en marcha
- Los requisitos cambiados tras la aprobación están señalados, con la redacción antigua y la nueva
- Los requisitos descartados tras la aprobación constan como decisiones, no se han borrado
- Los commits y pull requests citan las claves de los requisitos
03Control de acceso
Aquí viven la mayoría de los hallazgos graves en productos pequeños. Prueba cambiando IDs y quitando sesiones, no leyendo la interfaz.
- Toda ruta que lee o escribe datos privados comprueba la sesión
- Las acciones de administración comprueban un rol o permiso, no solo que haya sesión
- Cambiar un ID en una URL o petición no da acceso a datos de otra cuenta
- Los tokens de API tienen permisos acotados y revocarlos surte efecto al instante
- Los enlaces de restablecimiento, invitación y acceso caducan y solo sirven una vez
04Secretos y configuración
Revisa el historial además del estado actual. Una clave borrada en un commit posterior sigue publicada.
- No hay claves, tokens ni contraseñas en el repositorio ni en su historial
- Los archivos de entorno están excluidos del control de versiones
- Ningún secreto del servidor llega al navegador a través de una variable pública
- Producción y desarrollo usan credenciales distintas
- Las credenciales filtradas o compartidas se han rotado
05Dependencias
Usa una base de datos de avisos como npm audit u OSV y anota los identificadores. No te fíes de la memoria.
- Avisos conocidos revisados, con los identificadores de lo encontrado
- Lockfile en el repositorio y usado en el build
- Paquetes sin mantenimiento o abandonados anotados
- Scripts de instalación de las dependencias nuevas revisados
06Tratamiento de entradas
Todo lo que un usuario puede enviar es no fiable, incluidas cabeceras, nombres de archivo y cuerpos de webhooks.
- Las consultas a la base de datos están parametrizadas, nunca construidas con cadenas
- No hay eval ni ejecución dinámica de código con entradas del usuario
- El contenido del usuario se escapa antes de mostrarse
- Las subidas se validan por tipo y tamaño y se guardan fuera de la raíz web
- Las peticiones del servidor a URLs aportadas por usuarios están restringidas
- Los formularios públicos tienen límites de uso o protección contra abusos
07Flujos de dinero
Todo lo de aquí va por delante de lo demás. Un fallo que cobra o abona dos veces cuesta dinero cada hora que sigue en producción.
- Los manejadores de pagos y pedidos son idempotentes: un reintento no cobra dos veces
- Las firmas de los webhooks se verifican antes de fiarse de nada
- Precios e importes se calculan en el servidor, nunca se toman del cliente
- Reembolsos, créditos y cupones no pueden gastarse dos veces con peticiones simultáneas
08Fiabilidad y operación
Qué pasa en un mal día, y si alguien se enteraría.
- Los errores llegan a una monitorización que alguien revisa
- Hay copias de seguridad y se ha probado una restauración de verdad
- Las migraciones se aplican antes de desplegar el código que depende de ellas
- Las tareas programadas se pueden ejecutar dos veces sin daño
09Está en producción
Una auditoría de algo que nadie de fuera del equipo puede usar no ha terminado.
- Desplegado y accesible para alguien que no trabaja aquí
- URL de producción o ficha de la tienda anotada
- El registro y el flujo principal funcionan en producción, no solo en local
10Registro de hallazgos
Una fila por cada comprobación fallida. Ordena primero lo que cuesta dinero o expone datos. Un hallazgo sin evidencia es una opinión: quítalo o consigue la evidencia.
Gravedad: Crítica, Alta, Media, Baja o Informativa
| ID | Gravedad | Dónde | Evidencia | Reproducir | Solución propuesta | Estado |
|---|---|---|---|---|---|---|
| F-001 | [Crítica] | [ruta/archivo.ts:42] | [Qué muestra el problema] | [Pasos] | [Cambio a hacer] | Abierto |
| F-002 | [Alta] | [Ruta o archivo] | [Qué muestra el problema] | [Pasos] | [Cambio a hacer] | Abierto |
11Veredicto
Aprobada, u otra iteración. No existe el aprobado parcial.
- Resultado: [Aprobada / Otra iteración]
- Hallazgos abiertos: [Número por gravedad]
- Trabajo pendiente: [Dónde se siguen las correcciones]
- Próxima auditoría: [Fecha o motivo]