Skip to content

Repository files navigation

JSCodeScan

面向前端源码包的轻量级 SAST 扫描工具。

它适合在客户给出前端源码包后,快速定位可疑安全点,输出中文报告,并可选接入 AI 对命中结果做二次研判。

当前定位:首轮筛查 / 审计辅助工具。核心能力是规则扫描 + AI 研判,不是完整 AST / 污点追踪型 SAST。

功能

  • 递归扫描前端源码目录
  • 基于 JSON 规则发现可疑风险
  • 输出 findings.json 和中文 report.md
  • 支持 SiliconFlow AI 逐条研判
  • 支持按严重级别选择 AI 研判范围
  • AI 研判时显示进度,并实时保存结果
  • 支持规则热加载和规则启停

风险类别

当前规则覆盖:

  • xss:危险 HTML 渲染、动态执行
  • redirect:跳转和 URL 风险
  • secret:硬编码凭证、对象存储材料
  • auth-ui-only:仅前端鉴权、按钮显隐、路由守卫
  • graphql:GraphQL 查询面和高价值字段
  • bridge:JSBridge、WebView、postMessage
  • supply-chain:安装脚本、构建链、命令执行、环境变量

安装

要求:

  • Node.js >= 25.5.0
npm install
npm run compile

基本用法

node dist/index.js scan <targetPath> [options]

常用参数:

  • --output <dir>:输出目录
  • --with-ai:启用 AI 研判
  • --no-ai:禁用 AI 研判
  • --ai-severities <value>:AI 研判级别,支持 alllowmediumhighcritical、逗号多选
  • --format <json|md|both>:输出格式,默认 both
  • --include <glob>:自定义包含文件
  • --exclude <glob>:自定义排除文件
  • --max-snippet-lines <n>:报告代码片段行数

查看帮助:

node dist/index.js --help

扫描示例

扫描整个项目:

node dist/index.js scan /path/to/project --output ./output/project --no-ai

扫描前端目录:

node dist/index.js scan /path/to/project/apps/admin --output ./output/admin --no-ai

启用 AI,只研判高危和严重:

node dist/index.js scan /path/to/project/apps/admin --output ./output/admin-ai --with-ai --ai-severities high,critical

只输出 Markdown:

node dist/index.js scan /path/to/project/apps/admin --output ./output/admin --format md --no-ai

输出

默认输出到指定目录:

output/
└── <scan-name>/
    ├── findings.json
    └── report.md

report.md 是中文报告,包含:

  • 扫描概览
  • 分类统计
  • 严重级别统计
  • AI 结论统计
  • 优先关注项
  • 漏洞与代码细节
  • 扫描错误

每条命中包含文件、行列号、命中文本、风险说明、复核建议和代码片段。

AI 配置

方式一:环境变量。

export SILICONFLOW_API_KEY="your_api_key"
export SILICONFLOW_MODEL="Pro/zai-org/GLM-4.7"

方式二:本地配置文件。

cp config/ai.local.example.json config/ai.local.json

填写:

{
  "apiKey": "YOUR_SILICONFLOW_API_KEY",
  "model": "Pro/zai-org/GLM-4.7",
  "baseUrl": "https://api.siliconflow.cn/v1",
  "temperature": 0.2,
  "maxTokens": 2048,
  "timeoutMs": 30000
}

配置优先级:

  1. 环境变量
  2. config/ai.local.json
  3. 内置默认值

AI Prompt 模板:

  • config/prompts/triage.system.txt
  • config/prompts/triage.user.txt

AI 研判范围

默认 --with-ai 会研判全部命中。

可以用 --ai-severities 限制范围:

# 全量
--ai-severities all

# 只研判高危
--ai-severities high

# 只研判严重
--ai-severities critical

# 研判中危、高危、严重
--ai-severities medium,high,critical

AI 研判过程中会实时刷新:

  • findings.json
  • report.md

如果中断,已经完成的 AI 结果会尽量保留。

规则配置

运行时规则目录:

config/rules/
├── metadata.json
├── xss.json
├── redirect.json
├── secret.json
├── auth-ui-only.json
├── graphql.json
├── bridge.json
├── supply-chain.json
└── overrides.example.json

修改 config/rules/*.json 后不需要重新编译,下次扫描自动生效。

禁用规则

创建:

cp config/rules/overrides.example.json config/rules/overrides.local.json

示例:禁用噪声较大的规则。

{
  "enabledCategories": [],
  "disabledCategories": [],
  "enabledRuleIds": [],
  "disabledRuleIds": [
    "bridge.004",
    "graphql.004"
  ]
}

也可以禁用整个类别:

{
  "enabledCategories": [],
  "disabledCategories": ["bridge", "graphql"],
  "enabledRuleIds": [],
  "disabledRuleIds": []
}

恢复默认规则:删除 config/rules/overrides.local.json

建议流程

  1. --no-ai 做全量规则扫描
  2. report.md,确认命中数量和噪声来源
  3. overrides.local.json 关闭高噪声规则
  4. 再启用 --with-ai --ai-severities high,critical
  5. 最终由人工复核确认漏洞是否成立

局限

  • 当前主要是关键字和正则规则
  • 不能替代完整人工审计
  • 不能直接证明复杂业务越权
  • 暂不支持跨文件数据流和污点追踪

适合作为前端源码审计的第一轮线索发现工具。

About

js源码扫描

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages