SecurityDocumentation security-documentation

创建和维护包含政策、指南、合规要求和最佳实践的安全文档,用于安全应用开发和操作,关键词包括安全政策、合规文档、安全指南、事件响应计划、访问控制政策、数据保护政策、漏洞披露政策、安全审计报告。

安全审计 0 次安装 0 次浏览 更新于 3/4/2026

安全文档

概览

创建包括政策、指南、合规要求和最佳实践在内的全面安全文档,用于安全应用开发和操作。

何时使用

  • 安全政策
  • 合规文档(SOC 2、GDPR、HIPAA)
  • 安全指南和最佳实践
  • 事件响应计划
  • 访问控制政策
  • 数据保护政策
  • 漏洞披露政策
  • 安全审计报告

安全政策模板

# 安全政策

**版本:** 2.0
**最后更新:** 2025-01-15
**审核计划:** 季度
**所有者:** 安全团队
**联系:** security@example.com

## 目录

1. [概览](#概览)
2. [范围](#范围)
3. [认证与访问控制](#认证-访问控制)
4. [数据保护](#数据保护)
5. [应用安全](#应用安全)
6. [基础设施安全](#基础设施安全)
7. [事件响应](#事件响应)
8. [合规](#合规)
9. [安全培训](#安全培训)

---

## 1. 概览

### 目的

本安全政策定义了安全标准、实践和程序,以保护[公司名称]的信息资产、客户数据和基础设施。

### 目标

- 保护数据的机密性、完整性和可用性
- 遵守监管要求(GDPR、SOC 2等)
- 最小化安全风险和漏洞
- 明确安全责任
- 定义事件响应程序

### 范围

本政策适用于:
- 所有员工、承包商和第三方供应商
- 所有系统、应用程序和基础设施
- 所有客户和公司数据
- 包括本地和云资源

---

## 2. 认证与访问控制

### 2.1 密码要求

**最低要求:**
- 长度:最少12个字符
- 复杂性:大小写字母、数字和符号混合
- 历史:不能重复最后5个密码
- 过期:90天(特权账户)
- 锁定:5次失败尝试触发30分钟锁定

**示例强密码:**

好的:MyC0mplex!Pass#2025 坏的:password123


**实施:**

```javascript
// 密码验证
function validatePassword(password) {
  const minLength = 12;
  const requirements = {
    length: password.length >= minLength,
    uppercase: /[A-Z]/.test(password),
    lowercase: /[a-z]/.test(password),
    number: /[0-9]/.test(password),
    special: /[!@#$%^&*(),.?":{}|<>]/.test(password)
  };

  return Object.values(requirements).every(Boolean);
}

2.2 多因素认证(MFA)

要求:

  • 强制用于:
    • 生产系统访问
    • 管理账户
    • 面向客户的应用程序
    • VPN访问
    • 源代码仓库

支持方法:

  1. TOTP(Google Authenticator, Authy)
  2. SMS(仅备份,非主用)
  3. 硬件令牌(YubiKey)
  4. 生物识别(指纹、Face ID)

实施:

// MFA验证
async function verifyMFA(userId, token) {
  const user = await User.findById(userId);
  const secret = user.twoFactorSecret;

  // 验证TOTP令牌
  const isValid = speakeasy.totp.verify({
    secret,
    encoding: 'base32',
    token,
    window: 2 // 允许1分钟时间漂移
  });

  if (isValid) {
    await logSecurityEvent('mfa_success', userId);
    return true;
  }

  await logSecurityEvent('mfa_failure', userId);
  return false;
}

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

最小权限原则: 用户获得其角色所需的最小访问权限。

角色:

角色 权限 访问级别
管理员 全系统访问 读写/删除全部
开发者 代码、暂存环境 读写开发/暂存
支持 客户数据(有限) 读取客户数据
审计员 日志、审计跟踪 只读全部
用户 自己的数据 读写自己的数据

实施:

// 权限中间件
const requirePermission = (permission) => {
  return async (req, res, next) => {
    const user = req.user;
    const userPermissions = await getUserPermissions(user.role);

    if (!userPermissions.includes(permission)) {
      await logSecurityEvent('unauthorized_access', user.id, {
        permission,
        endpoint: req.path
      });

      return res.status(403).json({
        error: '权限不足',
        required: permission
      });
    }

    next();
  };
};

// 使用
app.delete('/api/users/:id', requirePermission('users:delete'), deleteUser);

3. 数据保护

3.1 数据分类

分类 描述 示例 保护
公开 非敏感,公开可用 营销材料 无需保护
内部 仅限内部使用 公司政策 访问控制
机密 敏感商业数据 财务报告 加密+MFA
受限 高度敏感 PII、密码、密钥 加密+严格访问

3.2 加密标准

数据静态存储:

  • 算法:AES-256
  • 密钥管理:AWS KMS / HashiCorp Vault
  • 数据库:透明数据加密(TDE)
// 加密敏感数据存储前
const crypto = require('crypto');

function encryptData(plaintext, key) {
  const iv = crypto.randomBytes(16);
  const cipher = crypto.createCipheriv('aes-256-gcm', key, iv);

  let encrypted = cipher.update(plaintext, 'utf8', 'hex');
  encrypted += cipher.final('hex');

  const authTag = cipher.getAuthTag();

  return {
    encrypted,
    iv: iv.toString('hex'),
    authTag: authTag.toString('hex')
  };
}

数据传输中:

  • 协议:TLS 1.3(最低TLS 1.2)
  • 密码套件:仅限强密码套件
  • 证书:有效的SSL/TLS证书
# Nginx TLS配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

3.3 数据保留

数据类型 保留期限 删除方法
客户数据 账户删除+30天 安全擦除
访问日志 90天 自动删除
审计日志 7年 归档后删除
备份 30天 覆盖+粉碎

4. 应用安全

4.1 安全编码实践

输入验证:

// ✅ 好的 - 验证和清理输入
const validator = require('validator');

function createUser(req, res) {
  const { email, name } = req.body;

  // 验证电子邮件
  if (!validator.isEmail(email)) {
    return res.status(400).json({ error: '无效电子邮件' });
  }

  // 清理名称
  const sanitizedName = validator.escape(name);

  // 使用参数化查询
  db.query(
    'INSERT INTO users (email, name) VALUES ($1, $2)',
    [email, sanitizedName]
  );
}

// ❌ 坏的 - SQL注入漏洞
function createUserBad(req, res) {
  const { email, name } = req.body;
  db.query(`INSERT INTO users VALUES ('${email}', '${name}')`);
}

XSS防护:

// 内容安全策略头
app.use((req, res, next) => {
  res.setHeader(
    'Content-Security-Policy',
    "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline';"
  );
  next();
});

// 清理输出
import DOMPurify from 'isomorphic-dompurify';

function renderComment(comment) {
  const clean = DOMPurify.sanitize(comment, {
    ALLOWED_TAGS: ['b', 'i', 'em', 'strong'],
    ALLOWED_ATTR: []
  });
  return clean;
}

4.2 安全头

// 安全头中间件
app.use((req, res, next) => {
  // 防止点击劫持
  res.setHeader('X-Frame-Options', 'DENY');

  // XSS保护
  res.setHeader('X-Content-Type-Options', 'nosniff');
  res.setHeader('X-XSS-Protection', '1; mode=block');

  // HTTPS强制执行
  res.setHeader('Strict-Transport-Security', 'max-age=31536000; includeSubDomains');

  // 引荐政策
  res.setHeader('Referrer-Policy', 'strict-origin-when-cross-origin');

  next();
});

4.3 API安全

速率限制:

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

const limiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15分钟
  max: 100, // 每个IP限制每个windowMs 100个请求
  message: '此IP请求过多',
  standardHeaders: true,
  legacyHeaders: false
});

app.use('/api/', limiter);

5. 基础设施安全

5.1 网络安全

防火墙规则:

  • 默认拒绝所有
  • 仅允许所需端口
  • 白名单信任IP用于管理访问
# 示例iptables规则
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# 允许特定IP的SSH
iptables -A INPUT -p tcp -s 203.0.113.0/24 --dport 22 -j ACCEPT

# 允许HTTP/HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

5.2 服务器加固

检查清单:

  • [ ] 禁用root SSH登录
  • [ ] 使用SSH密钥,禁用密码认证
  • [ ] 自动安装安全更新
  • [ ] 启用防火墙(ufw/iptables)
  • [ ] 配置fail2ban
  • [ ] 禁用未使用的服务
  • [ ] 启用审计日志
  • [ ] 设置入侵检测(AIDE, Tripwire)

6. 事件响应

6.1 安全事件严重性

严重性 描述 响应时间 示例
严重 大规模数据泄露,勒索软件 立即 数据库暴露,加密被破坏
重大安全漏洞 < 1小时 管理账户被入侵,DDoS
有限的安全问题 < 4小时 XSS漏洞,钓鱼尝试
轻微安全问题 < 24小时 弱密码,过时库

6.2 事件响应计划

阶段1:检测(0-15分钟)

  1. 通过监控/用户报告接收警报
  2. 分类严重性级别
  3. 组建事件响应团队
  4. 创建事件工单

阶段2:遏制(15-60分钟)

  1. 隔离受影响系统
  2. 阻止恶意IP/域名
  3. 吊销被入侵的凭证
  4. 启用额外监控

阶段3:调查(1-4小时)

  1. 分析日志和取证
  2. 确定攻击向量
  3. 确定泄露范围
  4. 记录发现

阶段4:根除(4-24小时)

  1. 移除恶意软件/后门
  2. 修补漏洞
  3. 更新安全控制
  4. 验证系统已清理

阶段5:恢复(24-48小时)

  1. 从干净的备份中恢复
  2. 逐步恢复服务
  3. 监控重新感染
  4. 更新文档

阶段6:事件后(1周)

  1. 进行事后分析
  2. 更新安全政策
  3. 实施预防措施
  4. 培训团队学习经验教训

7. 合规

7.1 GDPR合规

要求:

  • [ ] 数据处理记录
  • [ ] 隐私政策
  • [ ] 饼干同意
  • [ ] 数据主体权利(访问、删除、可移植性)
  • [ ] 数据泄露通知(72小时)
  • [ ] 数据保护影响评估(DPIA)

7.2 SOC 2合规

信任服务标准:

  • 安全: 防止未经授权的访问
  • 可用性: 系统按承诺可用
  • 处理完整性: 处理是完整和准确的
  • 机密性: 保密信息受到保护
  • 隐私: 个人信息得到适当处理

8. 漏洞披露

报告安全问题

联系: security@example.com PGP密钥: [链接到公钥]

奖励计划:

  • 严重:$5,000 - $10,000
  • 高:$1,000 - $5,000
  • 中:$500 - $1,000
  • 低:$100 - $500

范围:

  • ✅ 范围内:生产系统、API、移动应用
  • ❌ 范围外:测试环境、第三方服务

9. 安全审计日志

所有安全事件必须记录:

function logSecurityEvent(event, userId, metadata = {}) {
  logger.security({
    timestamp: new Date().toISOString(),
    event,
    userId,
    ip: metadata.ip,
    userAgent: metadata.userAgent,
    resource: metadata.resource,
    outcome: metadata.outcome
  });
}

// 记录事件:
// - login_success, login_failure
// - password_change
// - mfa_enabled, mfa_disabled
// - permission_change
// - data_export
// - admin_action