安全 · Security

最後更新 · Last updated: 2026-07-12

加密儲存 · Encrypted at rest — Supabase 磁碟級 AES-256 加密

Singapore-hosted — 主要 database + storage 駐留新加坡 ap-southeast-1

錄音自動刪除 · Audio auto-deleted — 語音檔案在轉錄完成後即時 purge

你簽署方為 final · You sign to finalise — AI 草稿須 practitioner 親自審閱 + 簽名方 lock

操作全程留痕 · Append-only audit log — 敏感操作寫入不可修改的紀錄,owner 隨時可查

1. 傳輸層加密1. Transport encryption

所有 traffic(browser ↔ Vercel ↔ Supabase ↔ AI providers)強制 HTTPS / TLS 1.2+。 HSTS preload header 啟用;HTTP downgrade 由 edge layer 自動 redirect 至 HTTPS。

2. 儲存層加密2. Storage encryption

  • Database:PostgreSQL on Supabase,underlying volume AES-256 加密
  • Object storage(logo / payment screenshot / SOAP audio buffer / InBody scan):Supabase Storage AES-256 加密 + 私人 bucket 預設禁止公開
  • Secrets(Supabase service role key、AI 供應商 API key、Resend API key 等):僅儲存於 Vercel 環境變數,不會 commit 入 git
  • 密碼:以 bcrypt 加 salt hash,不以明文儲存或記錄;Supabase Auth 處理

3. Row-Level Security (RLS)3. Row-Level Security

所有 PaceDesk 的 multi-tenant table 都啟用 PostgreSQL row-level security policies — 讀寫按 workspace_id 對照使用者所屬的 workspace(擁有或活躍成員身份)才放行;財務控制及跨 workspace 鏡射等敏感 table 更不設任何用戶端寫入 policy,只能經伺服器端受閘 route 寫入。呢層係應用層以外的獨立防線 — 即使應用層 code 有漏洞,資料庫層仍會獨立阻擋跨 workspace 存取。Service-role key(可繞過 RLS)僅伺服器端使用,不會 expose 給任何 client bundle。

Clinic 多人版在此之上再有一層職級權限(功能模組 × 存取等級 × client 範圍),同樣以 database 層 policy 執行,而非僅屬介面控制。我們維護一套 78 個探針的自動化權限矩陣測試,以真實測試帳戶直接對 production 資料庫驗證隔離(跨 workspace 零外洩、職級範圍、臨床紀錄作者鎖),每次權限相關改動後重新執行。

4. 語音錄音處理4. Voice recording handling

所有 audio file 在轉錄完成後即時刪除 — 我們不會持久儲存。 流程:

  1. Practitioner 在 client 同意後 record 一段語音
  2. 檔案 upload 至 Supabase Storage(私人 bucket,僅 workspace owner 可讀)
  3. 後端 download → 傳給 transcription provider → 取回文字
  4. 後端 best-effort delete 該 storage object(無論轉錄成敗)
  5. 轉錄文字儲存於 SOAP 紀錄;audio file 不再存在

此設計取代任何長期 audio 倉儲,將 audio leak 的 attack surface 縮減至「轉錄處理的數秒至數分鐘窗口」。

5. AI 草稿生成5. AI drafting

  • 所有 AI prompt 與 tool schema 在伺服器端載入(import "server-only")— 不會 bundle 落 client,避免 trade-secret 洩露
  • 傳給 AI 供應商的內容只是**轉錄文字 + 結構化輸入(MCQ / ROM / 等)**,不包 audio file
  • AI 供應商不會用 PaceDesk 的 API 流量訓練 model(commercial API 預設 opt-out)
  • 每次 generation stamp prompt_version + ai_model 入 row,便於 audit + 回放
  • 所有 AI 草稿須由 practitioner 審閱 + 簽署才 lock 為 final — AI 不可以單獨 finalise 紀錄

6. 客戶 Portal 認證6. Client portal access

Practitioner 透過 wa.me deep link 將 portal magic-link 寄給 client。Token 為 32-byte URL-safe random(256 bits entropy),30 日後自動失效,practitioner 隨時可 Regenerate 廢除舊 link。Portal 全部是 read-only — token 流出最多查看到自己一個 client 的紀錄,不會跨 client / 跨 workspace。

7. 帳戶認證 + 會話7. Authentication & sessions

  • Email + 密碼登入,或 Google 帳戶(OAuth)登入;密碼重設透過電郵 magic-link
  • JWT-based session,cookie 設定 HttpOnly + Secure + SameSite=Lax

8. 客戶錄音同意 (Consent)8. Audio recording consent

每個 SOAP session 開始錄音前,practitioner 必須按「Client 已同意錄音 + AI 處理」的 consent gate。此舉動會將「Patient acknowledged and consented to audio recording for clinical documentation prior to session」自動寫入 SOAP Subjective section 第一句。Practitioner 不可以繞過這個 gate。

9. 資料備份9. Backups

Supabase 每日自動 snapshot 整個 database,保留 7 日。Practitioner 亦可隨時於報告頁的匯出功能自行下載 workspace 資料(CSV / Excel)。

10. 監測 + 應變10. Monitoring & incident response

  • 錯誤監測:Sentry — 收 Stack trace 但不包敏感 PII
  • 使用分析:目前不使用任何行為追蹤 analytics 工具
  • 登入事件:由認證服務記錄;如懷疑帳戶被盜用,請立即聯絡我們重設
  • 事件響應:發現任何疑似資料洩露事件,將會在 72 小時內以電郵通知受影響 practitioner,並向香港私隱專員公署報告(如達披露門檻)
  • 財務紀錄完整性:已鎖定月份的帳目由 database trigger 阻止修改,月結後帳目不可被靜默竄改

11. 漏洞披露 (Responsible disclosure)11. Vulnerability disclosure

如閣下發現 PaceDesk 任何安全漏洞,請以電郵通知 hello@pacedesk.app。我們會:

  • 回覆確認(目標 72 小時內)
  • 盡快修補(critical issue 7 日內目標)
  • 修補後公開致謝(如閣下同意)

請勿主動測試其他 workspace 的資料 / DDoS / 社交工程攻擊員工。

12. 聯絡12. Contact

一般安全查詢:
hello@pacedesk.app