Auditoría frontsec (tarea dfl/day4-frontsec-scan)
Las 45 reglas del README.md del workspace son todas mecánicas y ya están implementadas en solve.mjs, en esta carpeta.
No calcules nada a mano, no decodifiques JWT ni leas cookies de cabeza. Ejecuta el script.
Paso a paso
-
En la raíz del workspace, ejecuta:
node .opencode/skills/frontsec/solve.mjsLee todas las carpetas de
casos/y escribe unout/<caso>.jsonpor caso. Para ejecutar un solo caso:node .opencode/skills/frontsec/solve.mjs ejemplo-2. -
Ejecuta
node .opencode/skills/checar-saida/check.mjs. -
Si existe
tests/public, ejecutanpx vitest run tests/public. -
Si todo pasa, detente. No edites los archivos de
out/manualmente.
Si algo falla
-
Nunca edites
.opencode/,tests/,casos/,README.mdnipackage*.json. Un archivo modificado fuera deout/anula la nota. -
Para corregir el script, cópialo a
/tmpy edita la copia:cp .opencode/skills/frontsec/solve.mjs /tmp/solve.mjs node /tmp/solve.mjsLa copia sigue leyendo
casos/y escribiendoout/desde la carpeta actual. -
Lee el mensaje del test, busca en el
README.mdla regla que cubre ese campo y corrige solo esa función:scanLine/scanHeaders(etapa 1),dependencias(etapa 2),sessao(etapa 3),plano(etapa 4). Máximo 3 ciclos. Si no pasa, deja la mejor salida que haya generado el script.
Lo que garantiza el script (para consultar en el README si es necesario)
- Etapa 1: recorre
dist/entero, incluyendo subcarpetas. Lee solo.jsy.html, línea por línea, y los comentarios cuentan.- La clave solo vale en el formato exacto:
pf_live_/pf_test_+ 24 o más[A-Za-z0-9], onvm_sec_+ 32 hex.pf_pub_,nvm_pub_y placeholder nunca cuentan. - JWT: el payload se decodifica en base64url.
roleanonousuarioes público. Cualquier otro valor, o sinrole, es FS03. - FS04: el sink solo cuenta con la fuente escrita literalmente en el fragmento hasta el
;. FS05: el primer carácter después del(no es comilla (backtick cuenta). FS11: el.mapdebe existir, resuelto desde la carpeta del.js, o serdata:. - CSP: vale
script-srcy, si no hay,default-src.Report-Onlyse ignora. HSTS necesitamax-age≥ 31536000. - Triplete repetido (
regla,archivo,línea) cuenta una vez. NotaFsi hay FS01 o FS03.
- La clave solo vale en el formato exacto:
- Etapa 2: resuelve como Node, subiendo
node_modules, con la raíz endependencies+devDependencies.- La ruta es la más corta y, en empate, la menor en orden de texto. La versión se compara numéricamente. Rango acepta
||. correcciones la versión publicada más baja por encima de la instalada que no cae en ningún aviso.navegadorrequiere el banner/*! nombre@versionen un.js.
- La ruta es la más corta y, en empate, la menor en orden de texto. La versión se compara numéricamente. Rango acepta
- Etapa 3:
- Los atributos no distinguen mayúsculas. El dominio queda sin
.inicial y la ruta predeterminada viene delcaminodel paso. Max-Agevale más queExpires. Vida ≤ 0 es eliminación.- Los 7 problemas salen en el orden de la lista.
no_eliminado_en_logoutrequiere eliminación con la misma identidad en el pasologout.
- Los atributos no distinguen mayúsculas. El dominio queda sin
- Etapa 4:
- Los ítems son
cred:,cod:,hdr:,dep:ycookie:. FS04 y FS05 en un.jscon banner de paquete vulnerable suman endep:. - Las excepciones se juzgan en el orden: inexistente, luego crítico, luego vencida.
- La prioridad es
⌊puntos × 10 ÷ esfuerzo⌋. Ordenación: prioridad, luego puntos, luego id.
- Los ítems son