硬编码密钥:AI 代理可自动修复的首要漏洞
发布: (2025年12月31日 GMT+8 13:39)
2 min read
原文: Dev.to
Source: Dev.to
问题
每周都有密钥泄漏:API 密钥被提交到 GitHub、数据库密码写在配置文件中、AWS 凭证出现在环境变量默认值里。
修复很简单,但检测并不容易——尤其是在大型代码库中。
典型的硬编码密钥模式:
// ❌ This ships to production more than you'd think
const db = new Pool({
host: 'prod-db.example.com',
user: 'admin',
password: 'super_secret_password_123', // CWE-798
});
const stripe = new Stripe('sk_live_abc123xyz789'); // Hardcoded API key
单独看这些代码很明显,但在 50 000 行的仓库里,它们隐藏在显眼处。
现有方法
| 方法 | 缺点 |
|---|---|
grep "password" | 误报过多 |
| Secret scanners | 仅能捕获已提交的密钥 |
| Code review | 人工容易遗漏 |
工具
eslint-plugin-secure-coding 添加了一套规则,在 lint 过程中检测硬编码凭证。错误信息采用 AI 可读取的格式:
- CWE‑798 – 机器可读的漏洞编号
- Fix instruction – 修复指令,需应用的精确模式
- Location – 位置,精确的行列号
示例 lint 输出
src/db.ts
5:3 error 🔒 CWE-798 OWASP:A02 CVSS:7.5 | Hardcoded credential detected
Fix: Use environment variable: process.env.DATABASE_PASSWORD
安全模式
将硬编码的值替换为环境变量:
// ✅ Secure pattern
const db = new Pool({
host: process.env.DATABASE_HOST,
user: process.env.DATABASE_USER,
password: process.env.DATABASE_PASSWORD,
});
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY);
像 Cursor、Copilot、Claude 这样的 AI 助手可以读取结构化错误信息,自动修复代码,无需人工干预。
安装
npm install --save-dev eslint-plugin-secure-coding
在 ESLint 配置中加入推荐配置:
// eslint.config.js
import secureCoding from 'eslint-plugin-secure-coding';
export default [secureCoding.configs.recommended];
就这么简单——一行配置即可激活 89 条安全规则,彻底消除硬编码密钥。
资源
- npm package: https://www.npmjs.com/package/eslint-plugin-secure-coding
- 规则文档:
no-hardcoded-credentials(插件内自带)