硬编码密钥: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 条安全规则,彻底消除硬编码密钥。

资源

Back to Blog

相关文章

阅读更多 »