安全扫描
OpenClaw
安全
high confidence该技能如其所述,作为本地静态/启发式扫描器用于 Node.js/Next.js 项目,但会读取项目文件并可以运行项目的构建脚本,在运行未信任代码时应谨慎使用。
评估建议
该工具在内部一致,似乎做了它所声称的,但会读取项目的源文件(包括 package.json 和任何明文秘密),在磁盘上产生报告,并如果使用 --build 选项,运行 npm run build 执行项目的构建脚本。仅在信任的项目上运行它,或者在扫描未信任代码时在隔离环境(容器/VM)内运行。分享生成的 AUTO-DEBUG-REPORT.md 之前,审查它是否包含任何标记的敏感数据。避免将很大或根路径(如 '/')作为 <project-dir> 传递,以防止扫描文件系统的意外部分。如果只想要静态检查,运行脚本时不带 --build 标志,并检查脚本源代码以确认行为。...详细分析 ▾
✓ 用途与能力
名称/描述、SKILL.md 指令以及包含的 scripts/auto-debug.js 一致:该工具扫描项目文件以查找未定义变量、缺失错误处理、水合问题、硬编码秘密,并可以选择运行 npm run build。没有声明的环境变量或不相关的依赖项与声明的目的相矛盾。
ℹ 指令范围
SKILL.md 和脚本保持在提供的项目目录范围内,验证源文件和 package.json,并(可选)运行构建。重要的操作行为:脚本递归读取项目文件(包括 package.json 和其他明文文件),使用正则表达式检测潜在秘密,并将写入报告文件(AUTO-DEBUG-REPORT.md)。当请求时,也会在项目目录中调用 npm run build。这些行为对于代码审计/构建检查工具是预期的,但敏感(可以暴露秘密并执行项目提供的构建脚本)。
✓ 安装机制
无安装规格 — 只有指令和捆绑的脚本。技能本身不执行远程下载或包安装。
✓ 凭证需求
技能未声明任何必需的环境变量或凭证。脚本不请求外部秘密;它读取提供的项目路径下的文件以查找硬编码的秘密和配置。该文件读取与扫描项目的声明目标成比例,但这意味着项目中的敏感数据可能会在生成的报告中暴露。
✓ 持久化与权限
技能未配置为 always: true,也不尝试修改其他技能或全局代理设置。它写入一个项目范围的报告文件(AUTO-DEBUG-REPORT.md),这是该工具的预期行为。
安全有层次,运行前请审查代码。
运行时依赖
无特殊依赖
版本
latestv1.0.02026/3/16
初始发布:后端/前端/配置扫描,水合检查,构建验证
● 可疑
安装命令 点击复制
官方npx clawhub@latest install node-auto-debugger
镜像加速npx clawhub@latest install node-auto-debugger --registry https://cn.clawhub-mirror.com
技能文档
自动化扫描 Node.js 项目 — 找到后端、前端和配置中的 bug。
快速开始
node scripts/auto-debug.js
选项:
--build— 也运行npm run build并捕获编译错误
它检查什么
后端 (Express/Fastify)
- 未定义变量 — 在未声明变量上调用
.push() - 缺失 try/catch — 异步路由处理器没有错误处理
- 硬编码秘密 — 源代码中的 API 密钥、私钥、密码
前端 (Next.js/React)
- 缺失 'use client' — 没有指令的 hook 或浏览器 API
- 水合风险 — 渲染中使用
Date.now()或Math.random()(应在useEffect或useState中使用) - SSR 崩溃 — 在
useEffect之外访问window/document - 缺失加载状态 — wagmi hook 没有
isLoading/isFetching
配置
- 缺失 next.config.js — 默认警告
- 缺失构建脚本 — package.json 验证
输出
报告保存到/AUTO-DEBUG-REPORT.md> ,按严重程度分组问题:
- 🔴 严重 — 将崩溃或泄露秘密
- 🟠 高 — 可能的运行时错误
- 🟡 中 — 水合不匹配、缺失加载状态
- 🟢 低 — 次要问题
修复水合问题 (Next.js)
Date.now()/new Date() 在渲染中:// ❌ 不好 — 导致水合不匹配
const now = Math.floor(Date.now() / 1000);
// ✅ 好 — 使用 isMounted 守卫
const [isMounted, setIsMounted] = useState(false);
useEffect(() => { setIsMounted(true); }, []);
const now = isMounted ? Math.floor(Date.now() / 1000) : 0;
Math.random() 在渲染中:
// ❌ 不好 — 服务器与客户端不同
${Math.random() 100}% }} />
// ✅ 好 — 使用 useState 预生成(仅运行一次)
const [particles] = useState(() => Array.from({ length: 10 }, () => ({ left: ${Math.random() 100}%, })) );
window/document 访问:
// ❌ 不好 — SSR期间崩溃
const width = window.innerWidth;
// ✅ 好 — 仅在挂载后
const [width, setWidth] = useState(0);
useEffect(() => setWidth(window.innerWidth), []);
数据来源:ClawHub ↗ · 中文优化:龙虾技能库
OpenClaw 技能定制 / 插件定制 / 私有工作流定制
免费技能或插件可能存在安全风险,如需更匹配、更安全的方案,建议联系付费定制
了解定制服务