自动修复建议
获取为检测到的漏洞生成的 AI 修复代码。
工作原理
get-fix-suggestion 工具提供:
- 代码对比(修改前/修改后)
- 漏洞解释
- 分步补救
- 替代方案(如适用)
支持的漏洞类型
硬编码密钥
// 原始(易受攻击)
const apiKey = "AIzaSyC1234567890abcdef";
// 已修复
const apiKey = process.env.GOOGLE_API_KEY;
// 额外建议:
// 1. 将 API 密钥添加到 .env 文件
// 2. 将 .env 添加到 .gitignore
// 3. 在 Google Cloud Console 中使用 API 密钥限制
SQL 注入
// 原始(易受攻击)
const query = `SELECT * FROM users WHERE id = ${userId}`;
db.query(query);
// 已修复 - 预处理语句
const query = 'SELECT * FROM users WHERE id = ?';
db.query(query, [userId]);
// 替代 - ORM
const user = await User.findByPk(userId);
XSS 漏洞
// 原始(易受攻击)
element.innerHTML = userInput;
// 已修复 - 选项 1:文本内容
element.textContent = userInput;
// 已修复 - 选项 2:DOMPurify
import DOMPurify from 'dompurify';
element.innerHTML = DOMPurify.sanitize(userInput);
弱密码学
// 原始(易受攻击)
const hash = crypto.createHash('md5').update(password).digest('hex');
// 已修复
const hash = await bcrypt.hash(password, 10);
// 或用于通用哈希
const hash = crypto.createHash('sha256').update(data).digest('hex');
不安全的身份验证
// 原始(易受攻击)
res.cookie('session', sessionId);
// 已修复
res.cookie('session', sessionId, {
httpOnly: true,
secure: process.env.NODE_ENV === 'production',
sameSite: 'strict',
maxAge: 3600000 // 1 小时
});
路径穿越
// 原始(易受攻击)
const file = fs.readFileSync(userPath);
// 已修复
const path = require('path');
const safePath = path.join(__dirname, 'uploads', path.basename(userPath));
// 验证路径在允许的目录内
if (!safePath.startsWith(path.join(__dirname, 'uploads'))) {
throw new Error('Invalid path');
}
const file = fs.readFileSync(safePath);
用法
获取特定问题的修复
我:如何修复这个 SQL 注入漏洞?
const query = `SELECT * FROM users WHERE email = '${email}'`;
扫描后获取修复
我:扫描此代码并向我展示如何修复问题
[粘贴代码]
Claude:[运行扫描,查找问题]
我:展示我如何修复 XSS 漏洞
Claude:[调用 get-fix-suggestion]
基于 AST 的代码转换
对于某些漏洞,工具使用抽象语法树(AST)分析来提供精确的修复:
- 确切的行号和列号
- 上下文感知的建议
- 维持代码格式
- 保留注释
最佳实践
- 应用前检查:在实施前理解修复
- 彻底测试:验证修复不会破坏功能
- 考虑替代方案:为您的用例选择最佳解决方案
- 更新依赖项:有时修复需要新包
- 记录更改:添加注释说明安全改进
限制
- 无法自动修复所有漏洞
- 某些问题需要架构更改
- 始终建议人工审查
- 特定上下文的修复可能需要调整
高级用法
请求多个修复选项
我:展示修复此身份验证问题的不同方式
获取解释和修复
我:解释为什么这是易受攻击的,以及如何修复它
框架特定的修复
我:我如何在 React/Vue/Angular 中修复这个问题?