# 2026-07-29 安全加固实录

## 安全审计发现与修复

| # | 问题 | 严重度 | 修复 |
|---|------|--------|------|
| 1 | App Secret 暴露在前端 | 🔴 高 | 切回服务端 `/api/feishu/auth`（Tailscale Funnel 公网代理） |
| 2 | CloudBase user_roles 全员可写 | 🔴 高 | 权限规则改为 `{"read":true,"write":"auth.openid==doc._openid"}` |
| 3 | 无登录限制 | 🟡 中 | localStorage 记录失败次数，每邮箱每小时最多5次 |
| 4 | CORS 全开放 | 🟡 中 | 内部工具可接受 + Tailscale 限局域网 |

## 飞书免登架构

```
飞书打开 → ?code=xxx → 前端 POST /api/feishu/auth
  → Python 服务端(密钥不暴露) → 飞书 OIDC API → 返回 name
  → 匹配 CloudBase user_roles → 自动登录
```

**依赖**：Tailscale Funnel (`tailscale funnel --bg http://127.0.0.1:8765`) 暴露本地 API

## 飞书限制访问

```javascript
var isInFeishu = /feishu/i.test(navigator.userAgent) || /Lark/i.test(navigator.userAgent);
if (!isInFeishu) {
  // 显示 "请在飞书内打开"，阻止访问
}
```

## 登录防暴力破解

```javascript
var attempts = JSON.parse(localStorage.getItem('bior_login_attempts') || '{}');
var key = email + '_' + new Date().toISOString().slice(0,13); // 按小时
if (attempts[key] >= 5) { /* 锁定 */ }
// 失败 +1，成功清零
```

## CloudBase 部署路径

- 源文件：`工具/index.html` → 部署为 `/workbench/index.html`
- `工具/销售工作台.html` **已废弃**
- admin.html 独立部署为 `/admin.html`
