eslint + security插件是js代码安全扫描最直接、最可控的选择,sonarlint为第二道防线,snyk仅扫描依赖不分析源码;eslint需配合eslint-plugin-security-node检测eval()等高危模式,sonarlint识别xss/sqli等语义漏洞,snyk须认证+手动触发+配置autoscan才生效。

ESLint + security 插件是 JS 代码安全扫描最直接、最可控的选择,SonarLint 是第二道防线,Snyk 只管依赖不碰源码——别指望它标出 eval(input) 的波浪线。
用 ESLint 检测硬编码密钥和危险函数调用
ESLint 本身不带安全规则,但装上 eslint-plugin-security-node 就能识别 eval()、child_process.exec()、innerHTML = userInput 这类高危模式。常见错误现象是本地跑通、上线后被命令注入或 XSS 攻击。
- 安装插件:
npm install --save-dev eslint-plugin-security-node - 在
.eslintrc.cjs中加入:"plugin:security-node/recommended" - 注意:默认规则不会报
process.env.API_KEY这种硬编码——得手动加detect-object-injection或写正则规则匹配/SECRET|PASSWORD|TOKEN/i - 确保 VSCode 设置里启用了
eslint.enable,且eslint.run设为onType或onSave
SonarLint 扫描 XSS/SQLi 等语义级漏洞
SonarLint 是本地运行的 SAST 工具,不开源代码上传,能识别 CWE-79(XSS)、CWE-89(SQLi)等 200+ 种漏洞模式,适合查表单处理、模板渲染、API 参数拼接逻辑。
- 安装即用,打开文件自动扫描;全项目扫描需右键文件夹 →
Scan Folder with SonarLint - 关键配置项:
sonarlint.rules,例如启用javascript:S1144(避免innerHTML)或javascript:S2068(检测硬编码密码) - 容易踩的坑:它默认跳过
node_modules,但如果你把密钥写在config/dev.js里,而该文件没被.gitignore排除,就可能漏检——务必确认扫描路径包含敏感配置目录
Snyk 只负责依赖漏洞,别让它干源码的活
Snyk 在 VSCode 里不分析 JS 语法树,只读 package.json 和 node_modules,查 CVE 编号。它不会在你写 fetch(url + '?token=' + token) 时标红,也不会提示你该用 Authorization header。
- 必须完成三步才能生效:
snyk auth认证 → 手动执行Snyk: Test this project→ 在.vscode/settings.json中设"snyk.autoScan": true - 它只响应
package.json变更,不监听.js文件修改 - 修复建议常不准:比如推你升
lodash到4.17.21,得先确认实际安装版本(防overrides干扰),再看漏洞详情页的Exploit Maturity字段——No known exploit可暂缓,Proof of concept就得优先处理
真正难的是上下文感知型风险:比如 AI 生成注释里写 “data from hostile regions”,既不是关键词也不是 CVE,传统工具全盲。这类问题需要语义模型(如 Qwen3Guard-Gen-8B)介入,但目前 VSCode 原生还不支持——得靠自研插件或 CI 阶段补位。











