Laboratorio de protecciones de Stonevale
[!TIP] Descarga el ZIP del alumno o copia todo este laboratorio en una carpeta sin usar. Lee la configuración y los pasos opcionales de GitHub primero.
Antes de ejecutar nada
| Elemento | Contrato |
|---|---|
| Runtime | Node 24; las integraciones en vivo son independientes |
| Archivos a revisar | starter/guard.js, verify.js |
| Directorio del verificador | Raíz del kit extraído: node verify.js; desde starter/: node ../verify.js |
| Estado inicial | Se rechaza un starter sin terminar; conserva el diagnóstico |
| Evidencia final | Solo se permiten los dos scripts nombrados; las cadenas inseguras suministradas se rechazan sin ejecución. |
Concepto en la práctica: La política recibe una cadena de comando y devuelve una decisión. Una cadena que contiene operadores de shell es una entrada de prueba rechazada, nunca un comando que este ejercicio te pida ejecutar.
Implementa guardrails deterministas de comando antes de que un paso de automatización llegue a un shell.
Misión
Completa starter/guard.js. isAllowed(command) debe devolver true únicamente cuando:
- la entrada sea una cadena no vacía;
- el ejecutable sea
node; - el script sea
verify.jsotest.js; - no aparezcan operadores del shell, sustituciones, rutas absolutas ni recorridos a directorios superiores.
Ejecuta node verify.js.
Ejecución guiada
- Ejecuta el verificador sin modificar y registra el estado inicial esperado.
- Pide una explicación fundamentada en las fuentes del código y las comprobaciones relevantes.
- Planifica: especifica pares exactos de ejecutable/script permitidos y todas las formas rechazadas. Mantén las entradas de prueba como cadenas; no implementes ejecución de shell. Indica el comportamiento booleano para entrada vacía y de tipo incorrecto.
- Implementa solo el fragmento aprobado y luego vuelve a ejecutar el mismo verificador.
- Permite temporalmente un argumento extra y confirma que el caso correspondiente falla. Restaura la allowlist.
- Revisa el diff y registra la limitación: esta función no está instalada como un hook en vivo. La compatibilidad con hooks es Preview y cualquier instalación requiere una configuración revisada aparte.
Finalización y restablecimiento seguro
- El comportamiento requerido y su caso negativo cuentan con evidencia observada.
- El resultado distingue la verificación local del comportamiento en vivo del host/runtime.
- No se cambiaron credenciales, archivos no relacionados ni servicios.
- La evidencia está guardada antes de restablecer el starter copiado.
Usa una nueva extracción para otro intento, o restaura solo los archivos nombrados desde una línea base de Git creada en esta copia. Nunca apliques un comando de restablecimiento de la raíz del currículo desde un proyecto ajeno.
Continúa con la aventura y la rúbrica.