Files
nxxmdata/docs/operations/SECURITY.md
2025-09-19 23:46:15 +08:00

6.6 KiB
Raw Blame History

安全指南

概述

本文档为宁夏智慧养殖监管平台提供全面的安全指导,包括安全漏洞报告、安全最佳实践、以及系统安全配置建议。

漏洞报告

报告渠道

如果您发现安全漏洞,请不要在公开渠道(如 GitHub Issues报告。

请通过以下私密渠道报告:

报告内容

请在安全报告中包含以下信息:

  1. 漏洞类型 (SQL注入、XSS、CSRF等)
  2. 影响范围 (影响的组件、用户类型、严重程度)
  3. 复现步骤 (详细的复现步骤)
  4. 概念验证 (代码示例或截图)
  5. 建议修复方案 (如果有修复建议请提供)

响应承诺

严重程度 确认时间 修复时间
严重 4 小时 24-48 小时
24 小时 3-7 天
72 小时 1-4 周
1 周 1-3 个月

认证与授权

JWT Token 安全

// 安全的 JWT 配置
const jwtConfig = {
  secret: process.env.JWT_SECRET, // 至少 64 字符的强密钥
  algorithm: 'HS256',
  expiresIn: '24h',
  issuer: 'nxxmdata-api',
  audience: 'nxxmdata-client'
};

密码安全

  • 最低长度 8 位
  • 必须包含大小写字母、数字和特殊字符
  • 使用 bcrypt 加密存储
  • 盐值强度至少为 12

权限控制

实施基于角色的访问控制 (RBAC)

  • admin: 系统管理员权限
  • manager: 养殖场管理员权限
  • operator: 操作员权限
  • viewer: 只读权限

数据安全

输入验证

所有用户输入必须经过严格验证:

// SQL 注入防护 - 使用参数化查询
const getFarms = async (status) => {
  return await Farm.findAll({
    where: { status } // Sequelize 自动参数化
  });
};

// XSS 防护 - 输入转义
const validator = require('validator');
const sanitizedInput = validator.escape(userInput);

数据加密

  • 敏感数据字段加密存储
  • 数据库连接使用 SSL/TLS
  • 文件传输使用 HTTPS

网络安全

HTTPS 配置

强制使用 HTTPS

server {
    listen 80;
    server_name nxxmdata.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    ssl_protocols TLSv1.2 TLSv1.3;
    # 其他 SSL 配置...
}

安全头配置

add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header Strict-Transport-Security "max-age=63072000";
add_header Content-Security-Policy "default-src 'self'";

速率限制

const rateLimit = require('express-rate-limit');

// API 速率限制
const apiLimiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15 分钟
  max: 100, // 每 IP 最多 100 请求
  message: 'Too many requests, please try again later'
});

// 登录限制更严格
const loginLimiter = rateLimit({
  windowMs: 15 * 60 * 1000,
  max: 5 // 每 IP 最多 5 次登录尝试
});

部署安全

Docker 安全

# 使用非特权用户
FROM node:18-alpine
RUN adduser -S node -u 1001
USER node

# 只读文件系统
# docker run --read-only --tmpfs /tmp myapp

环境变量

# 使用强密钥
JWT_SECRET=随机生成的64字符密钥
DB_PASSWORD=强密码
ENCRYPTION_KEY=32字节hex密钥

# 生产环境配置
NODE_ENV=production
LOG_LEVEL=warn

服务器加固

# 防火墙配置
ufw default deny incoming
ufw default allow outgoing
ufw allow ssh
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable

# SSH 安全
sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
sed -i 's/PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config

依赖安全

定期审计

# 检查已知漏洞
npm audit

# 修复漏洞
npm audit fix

# 更新依赖
npm update

自动化扫描

在 CI/CD 流程中集成安全扫描:

# .github/workflows/security.yml
name: Security Scan
on: [push, pull_request]
jobs:
  security:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Run npm audit
        run: npm audit --audit-level high

监控与日志

安全事件监控

// 记录安全相关事件
const logSecurityEvent = (event, details) => {
  securityLogger.warn({
    event,
    timestamp: new Date().toISOString(),
    ip: details.ip,
    userAgent: details.userAgent,
    details
  });
};

// 监控异常登录
if (failedAttempts > 3) {
  logSecurityEvent('MULTIPLE_LOGIN_FAILURES', {
    ip: req.ip,
    attempts: failedAttempts
  });
}

审计日志

  • 记录所有敏感操作
  • 包含用户信息、时间戳、操作详情
  • 定期备份和分析日志

应急响应

安全事件处理流程

  1. 发现阶段: 监控系统检测异常
  2. 评估阶段: 确定影响范围和严重程度
  3. 隔离阶段: 隔离受影响的系统
  4. 修复阶段: 修复漏洞或问题
  5. 恢复阶段: 恢复正常服务
  6. 总结阶段: 分析原因和改进措施

紧急联系方式

安全培训

开发人员安全意识

  • 定期进行安全培训
  • 了解 OWASP Top 10
  • 掌握安全编码实践
  • 参与安全代码审查

安全开发生命周期

  1. 需求阶段: 识别安全需求
  2. 设计阶段: 威胁建模分析
  3. 开发阶段: 安全编码实践
  4. 测试阶段: 安全测试和扫描
  5. 部署阶段: 安全配置检查
  6. 维护阶段: 持续监控和更新

合规要求

数据保护

  • 遵循数据保护法规
  • 实施数据分类管理
  • 提供数据删除机制
  • 限制数据访问权限

审计要求

  • 保留详细的操作日志
  • 定期进行安全审计
  • 配合第三方安全评估
  • 及时报告安全事件

安全检查清单

开发阶段

  • 输入验证和清理
  • 参数化查询
  • 错误处理不泄露信息
  • 使用安全的加密算法
  • 实施权限检查

部署阶段

  • HTTPS 配置正确
  • 安全头配置完整
  • 防火墙规则适当
  • 服务器已加固
  • 监控系统运行

运维阶段

  • 定期安全扫描
  • 及时更新补丁
  • 监控异常活动
  • 备份关键数据
  • 测试应急预案

联系我们

如有安全相关问题,请联系:


最后更新: 2025年1月 请定期查看本文档的更新版本