6.6 KiB
6.6 KiB
安全指南
概述
本文档为宁夏智慧养殖监管平台提供全面的安全指导,包括安全漏洞报告、安全最佳实践、以及系统安全配置建议。
漏洞报告
报告渠道
如果您发现安全漏洞,请不要在公开渠道(如 GitHub Issues)报告。
请通过以下私密渠道报告:
- 📧 安全邮箱: security@nxxmdata.com
- 🔒 加密通信: 支持 PGP 加密
报告内容
请在安全报告中包含以下信息:
- 漏洞类型 (SQL注入、XSS、CSRF等)
- 影响范围 (影响的组件、用户类型、严重程度)
- 复现步骤 (详细的复现步骤)
- 概念验证 (代码示例或截图)
- 建议修复方案 (如果有修复建议请提供)
响应承诺
| 严重程度 | 确认时间 | 修复时间 |
|---|---|---|
| 严重 | 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
});
}
审计日志
- 记录所有敏感操作
- 包含用户信息、时间戳、操作详情
- 定期备份和分析日志
应急响应
安全事件处理流程
- 发现阶段: 监控系统检测异常
- 评估阶段: 确定影响范围和严重程度
- 隔离阶段: 隔离受影响的系统
- 修复阶段: 修复漏洞或问题
- 恢复阶段: 恢复正常服务
- 总结阶段: 分析原因和改进措施
紧急联系方式
- 安全团队: security@nxxmdata.com
- 技术支持: support@nxxmdata.com
- 紧急热线: 400-xxx-xxxx
安全培训
开发人员安全意识
- 定期进行安全培训
- 了解 OWASP Top 10
- 掌握安全编码实践
- 参与安全代码审查
安全开发生命周期
- 需求阶段: 识别安全需求
- 设计阶段: 威胁建模分析
- 开发阶段: 安全编码实践
- 测试阶段: 安全测试和扫描
- 部署阶段: 安全配置检查
- 维护阶段: 持续监控和更新
合规要求
数据保护
- 遵循数据保护法规
- 实施数据分类管理
- 提供数据删除机制
- 限制数据访问权限
审计要求
- 保留详细的操作日志
- 定期进行安全审计
- 配合第三方安全评估
- 及时报告安全事件
安全检查清单
开发阶段
- 输入验证和清理
- 参数化查询
- 错误处理不泄露信息
- 使用安全的加密算法
- 实施权限检查
部署阶段
- HTTPS 配置正确
- 安全头配置完整
- 防火墙规则适当
- 服务器已加固
- 监控系统运行
运维阶段
- 定期安全扫描
- 及时更新补丁
- 监控异常活动
- 备份关键数据
- 测试应急预案
联系我们
如有安全相关问题,请联系:
- 安全邮箱: security@nxxmdata.com
- 技术支持: support@nxxmdata.com
- 项目地址: https://github.com/your-org/nxxmdata
最后更新: 2025年1月 请定期查看本文档的更新版本