Auditoria frontsec(任务 dfl/day4-frontsec-scan)
工作区 README.md 中的 45 条规则都是机械性的,并且已经在此文件夹的 solve.mjs 中实现。
不要手动计算任何东西,不要解码 JWT,也不要手动读取 cookie。运行脚本即可。
操作步骤
-
在工作区根目录下运行:
node .opencode/skills/frontsec/solve.mjs它会读取所有
casos/文件夹,并为每个案例写入out/<caso>.json。如果只想运行单个案例:node .opencode/skills/frontsec/solve.mjs exemplo-2。 -
运行
node .opencode/skills/checar-saida/check.mjs。 -
如果存在
tests/public,则运行npx vitest run tests/public。 -
如果全部通过,停止。不要手动编辑
out/中的文件。
如果出现失败
-
永远不要编辑
.opencode/、tests/、casos/、README.md或package*.json。 对out/之外文件的任何修改都会使分数归零。 -
要修复脚本,请将其复制到
/tmp并编辑副本:cp .opencode/skills/frontsec/solve.mjs /tmp/solve.mjs node /tmp/solve.mjs复制的脚本仍会从当前文件夹读取
casos/并写入out/。 -
阅读测试消息,在
README.md中找出覆盖该字段的规则,只修复对应的函数:scanLine/scanHeaders(第 1 阶段)、dependencias(第 2 阶段)、sessao(第 3 阶段)、plano(第 4 阶段)。 最多 3 个循环。如果仍未通过,保留脚本生成的最佳输出。
脚本保证的内容(如需可在 README 中核对)
- 第 1 阶段: 遍历整个
dist/目录,包括子文件夹。只读取.js和.html文件,逐行处理,注释也计入。- 密钥只接受精确格式:
pf_live_/pf_test_+ 24 个或更多[A-Za-z0-9],或nvm_sec_+ 32 个十六进制字符。pf_pub_、nvm_pub_和占位符永远不计入。 - JWT:payload 使用 base64url 解码。
role为anon或usuario表示公开。任何其他值,或没有role,都属于 FS03。 - FS04:sink 只有在源码中文字出现直到
;的位置才计入。FS05:(后的第一个字符不是引号(反引号也算)。FS11:.map必须存在,相对于.js所在目录解析,或者是data:协议。 - CSP:只考虑
script-src,如果没有则使用default-src。忽略Report-Only。HSTS 需要max-age≥ 31536000。 - 重复的三元组(
regra、arquivo、linha)只计一次。如果有 FS01 或 FS03,则标记为F。
- 密钥只接受精确格式:
- 第 2 阶段: 像 Node 一样解析,向上查找
node_modules,根目录为dependencies+devDependencies。- 路径选择最短的,如果相同则按文本顺序较小的。版本进行数值比较。范围支持
||。 correcao是已安装版本之上的最小已发布版本,且不触发任何警告。navegador要求在某个.js中存在 banner/*! nome@versao。
- 路径选择最短的,如果相同则按文本顺序较小的。版本进行数值比较。范围支持
- 第 3 阶段:
- 属性名不区分大小写。域名删除开头的
.,默认路径来自步骤的caminho。 Max-Age优先级高于Expires。有效期 ≤ 0 表示移除。- 7 个问题按列表顺序输出。
nao_removido_no_logout要求在logout步骤中使用相同的标识移除。
- 属性名不区分大小写。域名删除开头的
- 第 4 阶段:
- 条目为
cred:、cod:、hdr:、dep:和cookie:。如果某个.js文件中出现 FS04 或 FS05,且该文件带有易受攻击的包 banner,则归入dep:。 - 异常判断顺序:不存在、严重、已过期。
- 优先级为
⌊pontos × 10 ÷ esforco⌋。排序:优先级、点数、ID。
- 条目为