{T}

高安全架构 学习笔记(第 11 部分)

5.4 审计日志

javascript
// 审计日志系统
class AuditLogger {
  constructor() {
    this.logs = []
    this.sensitiveOperations = [
      'user:login',
      'user:logout',
      'user:delete',
      'permission:grant',
      'permission:revoke',
      'data:export',
      'data:delete',
      'config:change'
    ]
  }
  
  // 记录操作日志
  log(operation, details) {
    const entry = {
      id: this.generateId(),
      timestamp: new Date().toISOString(),
      operation,
      userId: details.userId,
      username: details.username,
      resource: details.resource,
      action: details.action,
      result: details.result,
      ipAddress: details.ipAddress,
      userAgent: details.userAgent,
      requestData: this.sanitizeData(details.requestData),
      responseData: this.sanitizeData(details.responseData)
    }
    
    // 保存日志
    this.logs.push(entry)
    this.persistLog(entry)
    
    // 敏感操作告警
    if (this.sensitiveOperations.includes(operation)) {
      this.alertSensitiveOperation(entry)
    }
    
    return entry
  }
  
  // 查询日志
  query(filters) {
    return this.logs.filter(log => {
      if (filters.userId && log.userId !== filters.userId) return false
      if (filters.operation && log.operation !== filters.operation) return false
      if (filters.startTime && new Date(log.timestamp) < new Date(filters.startTime)) return false
      if (filters.endTime && new Date(log.timestamp) > new Date(filters.endTime)) return false
      if (filters.result && log.result !== filters.result) return false
      return true
    })
  }
  
  // 数据脱敏
  sanitizeData(data) {
    if (!data) return data
    
    const sanitized = { ...data }
    const sensitiveFields = ['password', 'token', 'secret', 'apiKey']
    
    for (const field of sensitiveFields) {
      if (sanitized[field]) {
        sanitized[field] = '******'
      }
    }
    
    return sanitized
  }
  
  // 持久化日志
  persistLog(entry) {
    // 实际实现:写入数据库或日志文件
    console.log('审计日志:', entry)
  }
  
  // 敏感操作告警
  alertSensitiveOperation(entry) {
    console.log('敏感操作告警:', {
      operation: entry.operation,
      user: entry.username,
      timestamp: entry.timestamp
    })
    
    // 发送告警通知
    this.sendAlert(entry)
  }
  
  // 发送告警
  sendAlert(entry) {
    // 实际实现:发送邮件、短信、钉钉等
  }
  
  // 生成日志ID
  generateId() {
    return `audit-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`
  }
  
  // 审计中间件
  middleware() {
    return (req, res, next) => {
      const startTime = Date.now()
      
      // 拦截响应
      const originalSend = res.send
      res.send = function(data) {
        const duration = Date.now() - startTime
        
        // 记录日志
        auditLogger.log(`${req.method}:${req.path}`, {
          userId: req.user?.userId || 'anonymous',
          username: req.user?.username || 'anonymous',
          resource: req.path,
          action: req.method,
          result: res.statusCode < 400 ? 'success' : 'failed',
          ipAddress: req.ip,
          userAgent: req.get('user-agent'),
          requestData: req.body,
          responseData: typeof data === 'string' ? data.substring(0, 200) : data
        })
        
        originalSend.call(this, data)
      }
      
      next()
    }
  }
}

// 使用示例
const auditLogger = new AuditLogger()

// 应用审计中间件
app.use(auditLogger.middleware())

// 手动记录敏感操作
app.post('/admin/delete-user', (req, res) => {
  // 执行删除操作
  deleteUser(req.body.userId)
  
  // 记录审计日志
  auditLogger.log('user:delete', {
    userId: req.user.userId,
    username: req.user.username,
    resource: `/users/${req.body.userId}`,
    action: 'DELETE',
    result: 'success',
    ipAddress: req.ip,
    userAgent: req.get('user-agent'),
    requestData: { targetUserId: req.body.userId }
  })
  
  res.json({ message: '用户删除成功' })
})

六、软件安全

6.1 软件安全三层面

code
软件安全三层面:

┌─────────────────────────────────┐
│  1. 操作系统安全                 │
│     - 病毒防护                   │
│     - 木马检测                   │
│     - 补丁管理                   │
│     - 恶意脚本防护               │
├─────────────────────────────────┤
│  2. 数据库安全                   │
│     - SQL 注入防护               │
│     - 推理攻击防护               │
│     - 访问控制                   │
│     - 数据加密                   │
├─────────────────────────────────┤
│  3. Web 应用安全                 │
│     - XSS 防护                   │
│     - CSRF 防护                  │
│     - 重放攻击防护               │
│     - 敏感信息泄露防护           │
└─────────────────────────────────┘