ESLint不能直接查出密码硬编码,因其默认规则仅检查语法和逻辑,不识别"API_KEY": "sk-live-xxx"等敏感字符串赋值;需手动启用eslint-plugin-security等安全插件并配置"plugin:security/recommended"。

为什么 ESLint 不能直接查出密码硬编码?
ESLint 默认规则集不包含敏感信息扫描能力,它只做语法、风格和基础逻辑检查。no-unused-vars 或 no-undef 这类规则不会匹配 "API_KEY": "sk-live-xxx" 这样的字符串赋值。真正识别明文密钥需要额外插件或自定义规则。
常见错误现象:装了 ESLint,但 .env 里写 DB_PASSWORD=123456 依然零提示;JS 文件中 const token = "ghp_abc123..." 也不报错。
- 必须手动启用
eslint-plugin-security或@rushstack/eslint-plugin-security这类安全专项插件 - 在
.eslintrc.js中显式添加"plugin:security/recommended"配置 - 注意:这些插件对正则匹配敏感,若密钥被 base64 编码或拼接生成(如
"a"+"pi"+"key"),默认规则大概率漏检
如何让 VSCode 实时高亮 .env 和 config.json 里的敏感字段?
VSCode 自身不解析文件语义,仅靠文件名后缀无法触发安全扫描。需组合使用两类机制:文件内容搜索 + 扩展监听。
实操建议:
- 安装
Secrets Scanner(微软官方插件),它会在打开.env、config.json等文件时自动运行正则匹配,高亮password、token、private_key等关键词 - 在
settings.json中配置"secretsScanner.excludeGlobs"排除误报路径(如"**/node_modules/**") - 避免依赖单一关键词,补充自定义模式:在插件设置里加一条正则
(?i)(api[_-]?key|secret[_-]?key).*["':]\s*[a-zA-Z0-9+/]{20,},覆盖 Base64 格式的密钥
1Password 插件怎么防止代码里出现真实密钥?
它不“检查”已有密钥,而是从源头阻断明文写入。核心是用 op:// 协议替代硬编码值,把密钥存储和引用解耦。
典型流程:
- 选中代码中待替换的字符串(如
"sk-test-123"),执行命令1Password: Save in 1Password - 插件自动创建新条目,填入值,并在原位置插入
op://vault/item/field引用 - 项目需配合
1Password CLI或运行时注入工具(如dotenv-flow)解析该 URL,否则会报错 - ⚠️ 注意:若团队未统一安装 1Password CLI,或 CI 环境没配置访问权限,
op://引用会导致构建失败
插件权限声明不匹配时怎么快速验证?
VSCode v1.86+ 强制扩展声明权限,但很多安全插件(如 Secrets Scanner)只声明 workspace:read,却实际读取所有文件——这本身已是风险信号。
验证步骤:
- 打开扩展详情页 → 切到
Contributions标签 → 查看Capabilities区域声明的权限 - 对比其功能描述:若插件号称“扫描整个工作区”,但未声明
workspace:read,说明它可能绕过沙箱调用 Node.jsfsAPI,属违规行为 - 执行
Developer: Open Process Explorer,观察该插件进程是否建立异常网络连接(如连向未知域名)
真正难处理的是那些声明了合理权限、但行为越界的插件——它们不会在权限面板暴露问题,只能靠运行时监控或离线校验 .vsix 签名来确认完整性。


















