Files
admin-vben/docs/安全文档.md

653 lines
14 KiB
Markdown
Raw Permalink Normal View History

# 安全文档
## 安全概述
AIOTAGRO 管理系统安全文档涵盖系统安全设计、安全配置、安全审计、应急响应等安全相关事项。本文档为开发团队和运维团队提供完整的安全指南。
## 安全架构
### 1. 安全设计原则
#### 最小权限原则
- 每个组件只拥有完成其功能所需的最小权限
- 数据库用户按功能分离权限
- 文件系统权限严格控制
#### 纵深防御
- 多层安全防护机制
- 网络层、应用层、数据层全面防护
- 安全监控和告警机制
#### 安全默认配置
- 默认关闭不必要的服务
- 默认启用安全功能
- 默认使用强加密算法
### 2. 安全组件
#### 前端安全
- CSP (Content Security Policy) 策略
- XSS 防护机制
- CSRF 防护机制
- 安全头配置
#### 后端安全
- 输入验证和过滤
- SQL 注入防护
- 文件上传安全
- 会话安全管理
#### 基础设施安全
- 网络安全配置
- 系统安全加固
- 访问控制机制
- 日志审计系统
## 安全配置
### 1. 前端安全配置
#### CSP 配置
```javascript
// vite.config.js
export default defineConfig({
// CSP 配置
server: {
headers: {
'Content-Security-Policy': `
default-src 'self';
script-src 'self' 'unsafe-inline' 'unsafe-eval';
style-src 'self' 'unsafe-inline';
img-src 'self' data: https:;
font-src 'self';
connect-src 'self' https://api.aiotagro.com;
frame-ancestors 'none';
base-uri 'self';
form-action 'self'
`.replace(/\s+/g, ' ').trim()
}
}
})
```
#### 安全头配置
```nginx
# 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=31536000; includeSubDomains; preload";
add_header Referrer-Policy "strict-origin-when-cross-origin";
add_header Permissions-Policy "geolocation=(), microphone=(), camera=()";
```
### 2. 应用安全配置
#### 输入验证
```javascript
// 输入验证工具
export const validateInput = {
// 邮箱验证
email: (email) => {
const regex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
return regex.test(email)
},
// 手机号验证
phone: (phone) => {
const regex = /^1[3-9]\d{9}$/
return regex.test(phone)
},
// 密码强度验证
password: (password) => {
return password.length >= 8 &&
/[A-Z]/.test(password) &&
/[a-z]/.test(password) &&
/[0-9]/.test(password)
},
// XSS 防护
sanitize: (input) => {
return input.replace(/[<>"'&]/g, (char) => {
const escapeMap = {
'<': '<',
'>': '>',
'"': '"',
"'": '&#x27;',
'&': '&'
}
return escapeMap[char] || char
})
}
}
```
#### 会话安全
```javascript
// 会话管理
export const sessionManager = {
// 生成安全的会话 ID
generateSessionId: () => {
return crypto.randomBytes(32).toString('hex')
},
// 设置安全 Cookie
setSecureCookie: (name, value, options = {}) => {
const defaults = {
httpOnly: true,
secure: process.env.NODE_ENV === 'production',
sameSite: 'strict',
maxAge: 24 * 60 * 60 * 1000 // 24小时
}
document.cookie = `${name}=${value}; ${Object.entries({...defaults, ...options})
.map(([key, val]) => `${key}=${val}`)
.join('; ')}`
},
// 验证会话
validateSession: (sessionId) => {
// 验证会话有效性和权限
return true
}
}
```
### 3. 基础设施安全
#### 网络安全配置
```nginx
# 网络安全配置
# 限制请求大小
client_max_body_size 10m;
# 限制请求速率
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;
# IP 黑名单
geo $blacklist {
default 0;
192.168.1.100 1;
10.0.0.50 1;
}
server {
# 黑名单处理
if ($blacklist) {
return 403;
}
# API 速率限制
location /api/ {
limit_req zone=api burst=20 nodelay;
# ...
}
# 登录速率限制
location /api/auth/login {
limit_req zone=login burst=5 nodelay;
# ...
}
}
```
#### 系统安全加固
```bash
#!/bin/bash
# system-hardening.sh
echo "开始系统安全加固..."
# 1. 更新系统
sudo apt update && sudo apt upgrade -y
# 2. 配置防火墙
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
sudo ufw --force enable
# 3. 禁用不必要的服务
sudo systemctl disable apache2
sudo systemctl disable mysql
sudo systemctl disable postgresql
# 4. 配置 SSH 安全
sudo sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
sudo sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo sed -i 's/#MaxAuthTries 6/MaxAuthTries 3/' /etc/ssh/sshd_config
sudo systemctl restart sshd
# 5. 配置文件权限
sudo chmod 600 /etc/ssl/private/aiotagro.key
sudo chmod 644 /etc/ssl/certs/aiotagro.crt
sudo chown -R www-data:www-data /var/www/aiotagro
# 6. 配置日志审计
sudo apt install auditd
sudo auditctl -e 1
sudo systemctl enable auditd
echo "系统安全加固完成"
```
## 安全审计
### 1. 代码安全审计
#### 静态代码分析
```yaml
# .github/workflows/code-scan.yml
name: Code Security Scan
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
schedule:
- cron: '0 2 * * 1' # 每周一凌晨2点
jobs:
security-scan:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Run ESLint security rules
run: |
npx eslint . --ext .js,.vue,.ts --config .eslintrc.security.js
- name: Run SAST scan
uses: github/codeql-action/init@v2
with:
languages: javascript
queries: security-extended
- name: Run SAST analysis
uses: github/codeql-action/analyze@v2
- name: Run dependency check
uses: dependency-check/Dependency-Check_Action@main
with:
project: 'AIOTAGRO Frontend'
path: '.'
format: 'HTML'
- name: Upload security report
uses: actions/upload-artifact@v3
with:
name: security-reports
path: reports/
```
#### 安全规则配置
```javascript
// .eslintrc.security.js
module.exports = {
extends: [
'eslint:recommended',
'plugin:security/recommended'
],
plugins: ['security'],
rules: {
'security/detect-object-injection': 'error',
'security/detect-possible-timing-attacks': 'error',
'security/detect-non-literal-require': 'error',
'security/detect-non-literal-fs-filename': 'error',
'security/detect-eval-with-expression': 'error',
'security/detect-pseudoRandomBytes': 'error',
'security/detect-unsafe-regex': 'error'
}
}
```
### 2. 依赖安全审计
#### 依赖安全检查
```json
{
"scripts": {
"security:audit": "npm audit --audit-level moderate",
"security:fix": "npm audit fix",
"security:outdated": "npm outdated",
"security:check": "npx snyk test"
}
}
```
#### 自动化安全更新
```yaml
# .github/workflows/security-update.yml
name: Security Updates
on:
schedule:
- cron: '0 3 * * 0' # 每周日凌晨3点
workflow_dispatch:
jobs:
security-update:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
cache: 'npm'
- name: Check for security vulnerabilities
run: npm audit --audit-level moderate
- name: Update dependencies
if: always()
run: |
npm update --save
npm audit fix
- name: Create Pull Request
if: always()
uses: peter-evans/create-pull-request@v4
with:
title: '安全依赖更新'
body: '自动安全依赖更新'
branch: 'security-updates'
commit-message: '更新安全依赖'
```
### 3. 运行时安全监控
#### 安全事件监控
```javascript
// 安全监控工具
export const securityMonitor = {
// 记录安全事件
logSecurityEvent: (event) => {
const securityLog = {
timestamp: new Date().toISOString(),
event: event.type,
severity: event.severity || 'info',
userAgent: navigator.userAgent,
url: window.location.href,
details: event.details
}
// 发送到安全日志服务
fetch('/api/security/log', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(securityLog)
}).catch(console.error)
},
// 检测异常行为
detectAnomalies: () => {
// 检测异常请求模式
// 检测可疑用户行为
// 检测安全策略违规
},
// 实时告警
alert: (message, level = 'warning') => {
console[level](`[安全告警] ${message}`)
// 发送到告警系统
}
}
// 监控全局错误
window.addEventListener('error', (event) => {
securityMonitor.logSecurityEvent({
type: 'javascript_error',
severity: 'error',
details: {
message: event.message,
filename: event.filename,
lineno: event.lineno,
colno: event.colno
}
})
})
// 监控未处理的 Promise 拒绝
window.addEventListener('unhandledrejection', (event) => {
securityMonitor.logSecurityEvent({
type: 'unhandled_promise_rejection',
severity: 'error',
details: {
reason: event.reason
}
})
})
```
## 应急响应
### 1. 安全事件分类
#### 事件严重等级
| 等级 | 描述 | 响应时间 | 处理流程 |
|------|------|----------|----------|
| 紧急 | 系统被入侵,数据泄露 | 立即响应 | 隔离系统,通知管理层 |
| 高危 | 发现严重漏洞 | 2小时内响应 | 修复漏洞,安全审计 |
| 中危 | 发现中等风险漏洞 | 24小时内响应 | 制定修复计划 |
| 低危 | 发现低风险问题 | 72小时内响应 | 定期修复 |
### 2. 应急响应流程
#### 安全事件响应脚本
```bash
#!/bin/bash
# security-incident-response.sh
set -e
INCIDENT_TYPE="$1"
SEVERITY="$2"
echo "开始安全事件应急响应..."
echo "事件类型: $INCIDENT_TYPE"
echo "严重等级: $SEVERITY"
# 记录事件
timestamp=$(date +%Y%m%d_%H%M%S)
echo "[$timestamp] 安全事件: $INCIDENT_TYPE ($SEVERITY)" >> /var/log/security/incidents.log
case $SEVERITY in
"critical")
echo "执行紧急响应流程..."
# 1. 隔离受影响系统
echo "隔离系统..."
sudo systemctl stop nginx
sudo ufw deny http
sudo ufw deny https
# 2. 备份当前状态
echo "备份系统状态..."
tar -czf "/opt/aiotagro/forensics/incident_$timestamp.tar.gz" \
/var/log/nginx \
/var/log/auth.log \
/etc/nginx
# 3. 通知相关人员
echo "通知安全团队..."
# send_email "security@aiotagro.com" "安全事件告警" "发现紧急安全事件"
# 4. 启动取证调查
echo "启动取证调查..."
;;
"high")
echo "执行高危响应流程..."
# 1. 限制访问
echo "限制访问..."
sudo nginx -t && sudo systemctl reload nginx
# 2. 安全审计
echo "执行安全审计..."
npm audit
# 运行安全扫描工具
# 3. 修复漏洞
echo "修复安全漏洞..."
;;
*)
echo "执行标准响应流程..."
;;
esac
echo "安全事件响应完成"
```
### 3. 恢复流程
#### 系统恢复检查清单
```bash
#!/bin/bash
# security-recovery-checklist.sh
echo "=== 安全恢复检查清单 ==="
# 1. 验证系统完整性
echo "1. 验证系统完整性..."
checksum_original="$(sha256sum /opt/aiotagro/frontend/package.json | cut -d' ' -f1)"
checksum_current="$(sha256sum /opt/aiotagro/frontend/package.json | cut -d' ' -f1)"
if [ "$checksum_original" = "$checksum_current" ]; then
echo "✓ 系统文件完整性验证通过"
else
echo "✗ 系统文件可能被篡改"
fi
# 2. 检查安全配置
echo "2. 检查安全配置..."
nginx_test=$(sudo nginx -t 2>&1)
if echo "$nginx_test" | grep -q "test is successful"; then
echo "✓ Nginx 配置验证通过"
else
echo "✗ Nginx 配置存在错误"
fi
# 3. 验证证书状态
echo "3. 验证证书状态..."
if openssl x509 -checkend 86400 -noout -in /etc/ssl/certs/aiotagro.crt; then
echo "✓ SSL 证书有效"
else
echo "✗ SSL 证书即将过期或无效"
fi
# 4. 检查服务状态
echo "4. 检查服务状态..."
services=("nginx" "node-exporter")
for service in "${services[@]}"; do
if systemctl is-active --quiet "$service"; then
echo "✓ $service 服务运行正常"
else
echo "✗ $service 服务异常"
fi
done
# 5. 安全扫描
echo "5. 执行安全扫描..."
# 运行安全扫描工具
echo "安全恢复检查完成"
```
## 安全培训
### 1. 开发安全规范
#### 代码安全规范
```markdown
# AIOTAGRO 开发安全规范
## 1. 输入验证
- 所有用户输入必须验证
- 使用白名单验证策略
- 防范 XSS、SQL 注入等攻击
## 2. 身份认证
- 使用强密码策略
- 实现多因素认证
- 会话超时机制
## 3. 数据保护
- 敏感数据加密存储
- 传输层使用 TLS
- 最小化数据收集
## 4. 错误处理
- 不暴露系统信息
- 记录安全相关错误
- 统一的错误处理机制
## 5. 依赖管理
- 定期更新依赖
- 使用可信的包源
- 扫描依赖的安全漏洞
```
### 2. 运维安全规范
#### 运维安全清单
```markdown
# AIOTAGRO 运维安全清单
## 系统安全
- [ ] 定期系统更新
- [ ] 防火墙配置检查
- [ ] 用户权限审核
- [ ] 日志审计启用
## 应用安全
- [ ] 安全头配置检查
- [ ] SSL/TLS 配置验证
- [ ] 应用漏洞扫描
- [ ] 备份恢复测试
## 网络安全
- [ ] 网络隔离检查
- [ ] 访问控制验证
- [ ] 入侵检测配置
- [ ] DDoS 防护启用
## 数据安全
- [ ] 数据加密验证
- [ ] 访问日志审计
- [ ] 数据备份验证
- [ ] 隐私保护检查
```
通过以上安全配置和流程AIOTAGRO 管理系统可以实现全面的安全防护,确保系统稳定可靠运行。