Auditoria frontsec (task dfl/day4-frontsec-scan)
As 45 regras do README.md do workspace são todas mecânicas e já estão implementadas em solve.mjs, nesta pasta.
Não calcule nada à mão, não decodifique JWT nem leia cookie de cabeça. Rode o script.
Passo a passo
-
Na raiz do workspace, rode:
node .opencode/skills/frontsec/solve.mjsEle lê todas as pastas de
casos/e escreve umout/<caso>.jsonpor caso. Para rodar um caso só:node .opencode/skills/frontsec/solve.mjs exemplo-2. -
Rode
node .opencode/skills/checar-saida/check.mjs. -
Se existir
tests/public, rodenpx vitest run tests/public. -
Se tudo passou, pare. Não edite os arquivos de
out/à mão.
Se algo falhar
-
Nunca edite
.opencode/,tests/,casos/,README.mdnempackage*.json. Um arquivo alterado fora deout/zera a nota. -
Para corrigir o script, copie-o para
/tmpe edite a cópia:cp .opencode/skills/frontsec/solve.mjs /tmp/solve.mjs node /tmp/solve.mjsA cópia continua lendo
casos/e escrevendoout/a partir da pasta atual. -
Leia a mensagem do teste, ache no
README.mda regra que cobre aquele campo e corrija só essa função:scanLine/scanHeaders(etapa 1),dependencias(etapa 2),sessao(etapa 3),plano(etapa 4). No máximo 3 ciclos. Se não passar, deixe a melhor saída que o script gerou.
O que o script garante (para conferir no README se precisar)
- Etapa 1: percorre
dist/inteiro, inclusive subpastas. Lê só.jse.html, linha por linha, e os comentários contam.- Chave só vale no formato exato:
pf_live_/pf_test_+ 24 ou mais[A-Za-z0-9], ounvm_sec_+ 32 hex.pf_pub_,nvm_pub_e placeholder nunca contam. - JWT: o payload é decodificado em base64url.
roleanonouusuarioé público. Qualquer outro valor, ou semrole, é FS03. - FS04: o sink só conta com a fonte escrita literalmente no trecho até o
;. FS05: o primeiro caractere depois do(não é aspas (crase conta). FS11: o.mapprecisa existir, resolvido a partir da pasta do.js, ou serdata:. - CSP: vale
script-srce, se não houver,default-src.Report-Onlyé ignorado. HSTS precisa demax-age≥ 31536000. - Trio repetido (
regra,arquivo,linha) conta uma vez. NotaFse houver FS01 ou FS03.
- Chave só vale no formato exato:
- Etapa 2: resolve como o Node, subindo
node_modules, com a raiz emdependencies+devDependencies.- O caminho é o mais curto e, no empate, o menor em ordem de texto. Versão é comparada numericamente. Faixa aceita
||. correcaoé a menor versão publicada acima da instalada que não cai em nenhum aviso.navegadorexige o banner/*! nome@versaonum.js.
- O caminho é o mais curto e, no empate, o menor em ordem de texto. Versão é comparada numericamente. Faixa aceita
- Etapa 3:
- Atributos não diferenciam maiúsculas. O domínio fica sem
.inicial e o caminho padrão vem docaminhodo passo. Max-Agevale mais queExpires. Vida ≤ 0 é remoção.- Os 7 problemas saem na ordem da lista.
nao_removido_no_logoutexige remoção com a mesma identidade no passologout.
- Atributos não diferenciam maiúsculas. O domínio fica sem
- Etapa 4:
- Os itens são
cred:,cod:,hdr:,dep:ecookie:. FS04 e FS05 num.jscom banner de pacote vulnerável somam nodep:. - As exceções são julgadas na ordem: inexistente, depois crítico, depois vencida.
- A prioridade é
⌊pontos × 10 ÷ esforco⌋. Ordenação: prioridade, depois pontos, depois id.
- Os itens são