安全概述
FeedbackPulse SaaS 以安全为首要优先级构建。本页记录所有已实施的安全措施。
安全层级
传输安全
| 特性 | 实现方式 |
|---|---|
| HTTPS | 通过 SESSION_SECURE_COOKIE=true 和重定向中间件强制执行 |
| HSTS | Strict-Transport-Security: max-age=31536000; includeSubDomains |
| 安全 HTTP 头 | 由 SecurityHeaders 中间件在每次响应时应 用 |
身份验证
| 特性 | 实现方式 |
|---|---|
| 密码哈希 | Bcrypt,12 轮加密 |
| 双重身份验证 | 通过身份验证器应用实现 TOTP(Google Authenticator、Authy) |
| 社交登录 | 通过 Google 和 GitHub 实现 OAuth2 |
| 邮件验证 | 访问仪表板前必须完成验证 |
| 签名 URL | 用于团队邀请(7 天有效期) |
| 会话加密 | 会话在静止状态下加密 |
授权
| 特性 | 实现方式 |
|---|---|
| 基于角色的访问 | 4 种角色:superadmin、tenant_admin、tenant_staff、customer |
| 中间件守卫 | 路由级访问控制 |
| 租户隔离 | 全局作用域防止跨租户数据访问 |
| 套餐功能限制 | 功能受订阅套餐控制 |
应用安全
| 特性 | 实现方式 |
|---|---|
| CSRF 保护 | 所有表单使用 Laravel CSRF token(webhook/widget 除外) |
| XSS 防护 | Blade {{ }} 自动转义 |
| SQL 注入防护 | Eloquent 参数化查询 |
| 批量赋值防护 | 模型 $fillable 白名单 |
| 速率限制 | 按路由节流(5-120 次请求/分钟) |
API 安全
| 特性 | 实现方式 |
|---|---|
| API 密钥哈希 | SHA256 哈希存储 |
| 租户级速率限制 | 每租户 60 次请求/分钟 |
| 密钥轮换 | 撤销旧密钥,创建新密钥 |
| 最后使用追踪 | 每次使用时更新 last_used_at 时间戳 |
数据安全
| 特性 | 实现方式 |
|---|---|
| 敏感数据加密 | 平台设置在静止状态下加密 |
| GDPR 合规 | 数据导出、删除、匿名化工具 |
| 数据保留 | 根据套餐保留策略自动删除旧数据 |
| 审计日志 | 每项重要操作均记录 IP 和用户代理 |
| CSV 注入防护 | 导出时对公式字符进行消毒处理 |
Webhook 安全
| 特性 | 实现方式 |
|---|---|
| HMAC 签名 | 出站 webhook 使用 SHA256 签名 |
| SSRF 防护 | 阻止 webhook URL 中的本地地址和私有 IP |
| Stripe 签名验证 | Webhook 签名验证 |
| 事件去重 | 通过事件 ID 追踪防止重复处理 |
HTTP 安全头
由 SecurityHeaders 中间件应用:
X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Strict-Transport-Security: max-age=31536000; includeSubDomains
Referrer-Policy: strict-origin-when-cross-origin
Content-Security-Policy: [configured per deployment]