安全設計說明

秒帳從設計之初即以安全為優先。以下說明我們如何保護您的個人資料與企業報帳資訊。

資料存放於美國企業級伺服器(Railway)
🔒

傳輸加密

所有 API 通訊強制使用 TLS 1.2+ HTTPS,無任何明文傳輸

🔑

iOS Keychain

登入憑證儲存於 iOS Keychain,受 Secure Enclave 硬體保護

🛡️

JWT 身份驗證

每位員工持有獨立簽章 JWT,HMAC-SHA256 時序安全驗證

速率限制

登入端點設有速率限制,防止暴力破解與帳號列舉攻擊

🏗️

資料隔離

各公司資料嚴格隔離,員工僅能存取自身的報帳記錄

📋

稽核追蹤

所有報帳狀態變更均記錄不可竄改的稽核軌跡(含操作者與時間)

🔒傳輸安全

所有連線強制使用 HTTPS(TLS 1.2+),Railway 自動處理憑證更新
HTTP Strict Transport Security (HSTS) 已啟用,瀏覽器強制記憶使用 HTTPS 整整一年
API 回應包含完整 HTTP 安全標頭:Content-Security-Policy、X-Frame-Options、X-Content-Type-Options、Referrer-Policy
所有表單提交與 API 請求僅允許來自同一網域(form-action: self)

🔑身份驗證

員工登入採用 HMAC-SHA256 簽章的 JWT(JSON Web Token),每位員工擁有獨立 Token
JWT 簽章驗證使用 timingSafeEqual(時序安全比較),防止 Timing Oracle 攻擊
管理員 Token 以 HMAC-SHA256 衍生,不採用可預測的字串格式
管理員密碼比對同樣使用 timingSafeEqual,防止時序分析
Magic Link 登入連結效期僅 15 分鐘,使用後立即作廢(原子性操作,無競爭條件)
邀請 Token 及密碼重設 Token 均使用資料庫原子性操作消費,防止重複使用

📱iOS 裝置安全

登入 JWT 憑證儲存於 iOS Keychain(kSecClassGenericPassword),而非 UserDefaults
Keychain 項目設定 kSecAttrAccessibleAfterFirstUnlock,受裝置解鎖保護
正式版(Release)App 禁止透過 UserDefaults 覆蓋後端 URL,防止中間人攻擊
App 僅在 DEBUG 模式下允許指向本地開發伺服器,正式版強制使用生產端點

🛡️存取控制

員工角色(App 用戶)與管理員角色(網頁後台)嚴格分離,不可互換
每個 API 端點均驗證請求者對目標資源的所有權(IDOR 防護)
員工僅能讀取、修改自己提交的報帳記錄,無法存取他人資料
管理員操作(核准、拒絕、退回、核銷)需管理員 Token,員工 Token 無法執行
稽核軌跡中的操作者姓名取自 JWT Payload,不信任請求 Body 傳入的值(防止偽造)

防暴力破解

員工登入:每個 IP 每 15 分鐘最多 5 次嘗試,超過後回傳 429 並附 Retry-After 標頭
管理員登入:每個 IP 每 15 分鐘最多 5 次嘗試
Magic Link 請求:每個 IP 每小時最多 10 次;同一信箱每小時最多 3 次(防止信箱轟炸)
密碼雜湊使用 scrypt(記憶體困難型演算法),增加暴力破解的時間與資源成本

📋資料完整性

掃描點數扣除使用資料庫 UPDATE ... WHERE balance > 0 RETURNING 原子操作,防止零點數繞過
所有 Token 消費(Magic Link、邀請、密碼重設)採用 UPDATE...RETURNING 原子操作,防止競爭條件(TOCTOU)
收據上傳驗證檔案類型(JPEG/PNG/HEIC/WEBP)及大小(最大 10MB),拒絕非圖片檔案
各公司資料以 company_id 嚴格隔離,不存在跨公司資料洩漏的查詢路徑

🏗️基礎設施

服務部署於 Railway 企業級雲端平台(美國資料中心),具備自動 TLS 憑證管理
資料庫使用 PostgreSQL,每日自動備份
所有敏感設定(API 金鑰、JWT 密鑰)以環境變數儲存,不進入版本控制
HTTP 安全標頭:X-Frame-Options: DENY 防止 Clickjacking;Content-Security-Policy 限制資源來源

🔍 安全漏洞回報

如果您發現任何安全漏洞,我們非常歡迎您負責任地回報。請勿公開揭露,直接來信告知:

回報安全問題 →

我們承諾在 48 小時內確認收到,並於 7 個工作日內評估與回覆處理進度。

隱私政策 →服務條款 →返回首頁