Communitygithub.com

SamuelStefano/dfl-day4-agente-frontsec

前端安全审计(FS01–FS11 扫描、依赖检查、会话 Cookie、优先级修复计划)。一个确定性脚本实现了 README.md 中的第 1–45 条规则,并输出 out/<caso>.json。

dfl-day4-agente-frontsec 是什么?

该技能是一个用于前端安全审计的确定性自动化脚本,实现了 README.md 中定义的全部 45 条机械规则。它支持对前端代码进行 11 项安全扫描(FS01–FS11),包括敏感密钥泄露、JWT 权限、不安全 sink、CSP/HSTS 头、第三方依赖漏洞、会话 Cookie 安全属性以及修复优先级排序。脚本自动读取 casos/ 目录下的所有案例,为每个案例生成结构化的 JSON 报告文件 out/<caso>.json。它遵循严格的输出格式,不允许人工编辑输出文件,并提供了脚本调试机制(复制到 /tmp 修改)。该技能兼容所有主流 AI 编码助手(如 Claude Code、Cursor、Codex),适合集成到 CI/CD 管道或开发工作流中进行自动化安全审计。支持分阶段修复:文件扫描阶段、依赖分析阶段、会话分析阶段和修复计划生成阶段。

兼容平台~Claude Code~Codex CLI~Cursor✓OpenCode
npx skills add https://github.com/SamuelStefano/dfl-day4-agente-frontsec/tree/HEAD/skills/frontsec

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Auditoria frontsec(任务 dfl/day4-frontsec-scan)

工作区 README.md 中的 45 条规则都是机械性的,并且已经在此文件夹的 solve.mjs 中实现。 不要手动计算任何东西,不要解码 JWT,也不要手动读取 cookie。运行脚本即可。

操作步骤

  1. 在工作区根目录下运行:

    node .opencode/skills/frontsec/solve.mjs
    

    它会读取所有 casos/ 文件夹,并为每个案例写入 out/<caso>.json。如果只想运行单个案例: node .opencode/skills/frontsec/solve.mjs exemplo-2。

  2. 运行 node .opencode/skills/checar-saida/check.mjs。

  3. 如果存在 tests/public,则运行 npx vitest run tests/public。

  4. 如果全部通过,停止。不要手动编辑 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。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

相关技能