331 lines
6.6 KiB
Markdown
331 lines
6.6 KiB
Markdown
|
|
# 安全指南
|
|||
|
|
|
|||
|
|
## 概述
|
|||
|
|
|
|||
|
|
本文档为宁夏智慧养殖监管平台提供全面的安全指导,包括安全漏洞报告、安全最佳实践、以及系统安全配置建议。
|
|||
|
|
|
|||
|
|
## 漏洞报告
|
|||
|
|
|
|||
|
|
### 报告渠道
|
|||
|
|
|
|||
|
|
**如果您发现安全漏洞,请不要在公开渠道(如 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月*
|
|||
|
|
*请定期查看本文档的更新版本*
|