# 安全指南 ## 概述 本文档为宁夏智慧养殖监管平台提供全面的安全指导,包括安全漏洞报告、安全最佳实践、以及系统安全配置建议。 ## 漏洞报告 ### 报告渠道 **如果您发现安全漏洞,请不要在公开渠道(如 GitHub Issues)报告。** 请通过以下私密渠道报告: - 📧 **安全邮箱**: security@nxxmdata.com - 🔒 **加密通信**: 支持 PGP 加密 ### 报告内容 请在安全报告中包含以下信息: 1. **漏洞类型** (SQL注入、XSS、CSRF等) 2. **影响范围** (影响的组件、用户类型、严重程度) 3. **复现步骤** (详细的复现步骤) 4. **概念验证** (代码示例或截图) 5. **建议修复方案** (如果有修复建议请提供) ### 响应承诺 | 严重程度 | 确认时间 | 修复时间 | |---------|---------|---------| | 严重 | 4 小时 | 24-48 小时 | | 高 | 24 小时 | 3-7 天 | | 中 | 72 小时 | 1-4 周 | | 低 | 1 周 | 1-3 个月 | ## 认证与授权 ### JWT Token 安全 ```javascript // 安全的 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**: 只读权限 ## 数据安全 ### 输入验证 所有用户输入必须经过严格验证: ```javascript // 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: ```nginx 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 配置... } ``` ### 安全头配置 ```nginx 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'"; ``` ### 速率限制 ```javascript 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 安全 ```dockerfile # 使用非特权用户 FROM node:18-alpine RUN adduser -S node -u 1001 USER node # 只读文件系统 # docker run --read-only --tmpfs /tmp myapp ``` ### 环境变量 ```bash # 使用强密钥 JWT_SECRET=随机生成的64字符密钥 DB_PASSWORD=强密码 ENCRYPTION_KEY=32字节hex密钥 # 生产环境配置 NODE_ENV=production LOG_LEVEL=warn ``` ### 服务器加固 ```bash # 防火墙配置 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 ``` ## 依赖安全 ### 定期审计 ```bash # 检查已知漏洞 npm audit # 修复漏洞 npm audit fix # 更新依赖 npm update ``` ### 自动化扫描 在 CI/CD 流程中集成安全扫描: ```yaml # .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 ``` ## 监控与日志 ### 安全事件监控 ```javascript // 记录安全相关事件 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. **总结阶段**: 分析原因和改进措施 ### 紧急联系方式 - **安全团队**: security@nxxmdata.com - **技术支持**: support@nxxmdata.com - **紧急热线**: 400-xxx-xxxx ## 安全培训 ### 开发人员安全意识 - 定期进行安全培训 - 了解 OWASP Top 10 - 掌握安全编码实践 - 参与安全代码审查 ### 安全开发生命周期 1. **需求阶段**: 识别安全需求 2. **设计阶段**: 威胁建模分析 3. **开发阶段**: 安全编码实践 4. **测试阶段**: 安全测试和扫描 5. **部署阶段**: 安全配置检查 6. **维护阶段**: 持续监控和更新 ## 合规要求 ### 数据保护 - 遵循数据保护法规 - 实施数据分类管理 - 提供数据删除机制 - 限制数据访问权限 ### 审计要求 - 保留详细的操作日志 - 定期进行安全审计 - 配合第三方安全评估 - 及时报告安全事件 ## 安全检查清单 ### 开发阶段 - [ ] 输入验证和清理 - [ ] 参数化查询 - [ ] 错误处理不泄露信息 - [ ] 使用安全的加密算法 - [ ] 实施权限检查 ### 部署阶段 - [ ] HTTPS 配置正确 - [ ] 安全头配置完整 - [ ] 防火墙规则适当 - [ ] 服务器已加固 - [ ] 监控系统运行 ### 运维阶段 - [ ] 定期安全扫描 - [ ] 及时更新补丁 - [ ] 监控异常活动 - [ ] 备份关键数据 - [ ] 测试应急预案 ## 联系我们 如有安全相关问题,请联系: - **安全邮箱**: security@nxxmdata.com - **技术支持**: support@nxxmdata.com - **项目地址**: https://github.com/your-org/nxxmdata --- *最后更新: 2025年1月* *请定期查看本文档的更新版本*