零度AI
高级15 分钟阅读

Claude Code 安全最佳实践

学习如何使用 Claude Code 编写安全的代码,避免常见的安全隐患

Claude Code安全最佳实践代码审查

代码安全的重要性

编写安全的代码是每个开发者的责任。Claude Code 可以帮助你:

  • 识别潜在的安全隐患
  • 实施安全最佳实践
  • 代码安全审查
  • 修复安全漏洞

安全无小事

一个安全漏洞可能会导致严重后果,从数据泄露到系统崩溃。永远不要忽略安全问题!

常见安全问题

1. SQL 注入

javascript
// ❌ 不安全的代码
app.get('/users', (req, res) => {
  const { id } = req.query
  const sql = `SELECT * FROM users WHERE id = ${id}` // 危险!
  db.query(sql, (err, results) => {
    res.json(results)
  })
})

// ✅ 安全的代码
app.get('/users', (req, res) => {
  const { id } = req.query
  const sql = 'SELECT * FROM users WHERE id = ?' // 使用占位符
  db.query(sql, [id], (err, results) => {
    res.json(results)
  })
})

2. XSS 攻击

javascript
// ❌ 不安全的代码
function renderUserComment(comment) {
  return `<div>${comment}</div>` // 直接渲染,危险!
}

// ✅ 安全的代码
function escapeHtml(text) {
  const map = {
    '&': '&amp;',
    '<': '&lt;',
    '>': '&gt;',
    '"': '&quot;',
    "'": '&#039;'
  }

  return text.replace(/[&<>"]/g, m => map[m])
}

function renderUserComment(comment) {
  return `<div>${escapeHtml(comment)}</div>`
}

3. 跨站请求伪造 (CSRF)

javascript
// ❌ 不安全的表单
<form action="/change-password" method="POST">
  <input type="password" name="newPassword">
  <button type="submit">修改密码</button>
</form>

// ✅ 安全的表单 - 添加 CSRF 令牌
<form action="/change-password" method="POST">
  <input type="hidden" name="_csrf" value="<%= csrfToken %>">
  <input type="password" name="newPassword">
  <button type="submit">修改密码</button>
</form>

安全最佳实践

1. 输入验证

javascript
function validateEmail(email) {
  const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
  return emailRegex.test(email)
}

function validatePassword(password) {
  // 密码至少 8 个字符,包含字母和数字
  return password.length >= 8 && /[a-zA-Z]/.test(password) && /[0-9]/.test(password)
}

2. 密码安全

javascript
// 使用 bcrypt 哈希密码
import bcrypt from 'bcryptjs'

async function hashPassword(password) {
  const saltRounds = 10
  return bcrypt.hash(password, saltRounds)
}

async function comparePassword(password, hashedPassword) {
  return bcrypt.compare(password, hashedPassword)
}

3. 身份验证

javascript
// 使用 JWT 进行身份验证
import jwt from 'jsonwebtoken'

function generateToken(user) {
  const payload = {
    id: user.id,
    email: user.email,
    role: user.role
  }

  return jwt.sign(payload, process.env.JWT_SECRET, { expiresIn: '1h' })
}

function verifyToken(token) {
  try {
    return jwt.verify(token, process.env.JWT_SECRET)
  } catch (error) {
    return null
  }
}

安全代码审查

1. 使用 ESLint 规则

javascript
// .eslintrc.js
module.exports = {
  env: {
    browser: true,
    node: true
  },
  extends: ['eslint:recommended'],
  rules: {
    // 防止使用 eval
    'no-eval': 'error',
    // 防止使用 alert、confirm、prompt
    'no-alert': 'warn',
    // 防止使用 with 语句
    'no-with': 'error',
    // 防止使用 delete
    'no-delete-var': 'error'
  }
}

2. 安全扫描工具

bash
# 使用 eslint-plugin-security
npm install eslint-plugin-security --save-dev

# 使用 npm audit
npm audit

# 使用 Snyk 进行安全扫描
npm install -g snyk
snyk test

服务器安全

1. 环境变量

javascript
// 错误的做法
const DB_PASSWORD = 'password123'

// 正确的做法
const DB_PASSWORD = process.env.DB_PASSWORD

2. CORS 配置

javascript
import cors from 'cors'

const allowedOrigins = ['https://example.com', 'http://localhost:3000']

const corsOptions = {
  origin: (origin, callback) => {
    if (!origin || allowedOrigins.includes(origin)) {
      callback(null, true)
    } else {
      callback(new Error('Not allowed by CORS'))
    }
  },
  credentials: true
}

app.use(cors(corsOptions))

3. 日志和监控

javascript
import winston from 'winston'

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.json(),
  transports: [
    new winston.transports.File({ filename: 'error.log', level: 'error' }),
    new winston.transports.File({ filename: 'combined.log' })
  ]
})

// 记录错误
app.use((err, req, res, next) => {
  logger.error(err.stack)
  res.status(500).json({ error: '服务器内部错误' })
})

实战案例:安全审计

运行安全扫描

bash
# 运行 npm audit 检查依赖
npm audit

# 使用 eslint 检查代码
npm run lint

# 使用安全扫描工具
npm install -g eslint-plugin-security
eslint --plugin security .

修复发现的问题

javascript
// 修复代码中的安全问题
// 1. 替换 eval 为安全的方法
// 2. 修复 SQL 注入漏洞
// 3. 改进密码存储

验证修复

bash
# 再次运行安全扫描
npm audit fix
npm run lint

常见安全检查清单

代码审计

  • ✅ 检查是否有硬编码的敏感信息
  • ✅ 验证输入是否被正确验证
  • ✅ 检查密码是否正确存储
  • ✅ 验证是否防止了常见攻击

依赖审计

  • ✅ 检查是否有已知漏洞的依赖
  • ✅ 使用 npm audit 定期检查
  • ✅ 及时更新有安全问题的依赖

配置审计

  • ✅ 检查日志配置是否正确
  • ✅ 验证环境变量是否安全存储
  • ✅ 检查 CORS 和安全策略

下一步

掌握了安全最佳实践后,接下来可以学习:

  • Claude Code DevOps - 运维安全
  • Claude Code 架构安全 - 系统架构安全
  • Claude Code 威胁建模 - 风险评估

安全高于一切

记住,安全是一个持续的过程,不是一次性任务。Claude Code 可以帮助你建立良好的安全习惯!