[007] 【安全】為什麼用 6 碼 Token 而不是永久連結?活動房間的生命週期設計
在開發 FollowMe8 的組隊功能時,一個核心問題擺在我們面前:如何在確保組隊加入方便快捷的同時,又能堅守隱私與安全性,特別是針對活動結束後的資料處理?
我們最初曾考慮仿效許多協作工具,為每個活動生成一個 UUID 格式的「永久連結」。這樣做的好處是分享極為方便,只需複製貼上即可。但我們很快意識到,對於一個戶外車隊追蹤工具而言,永久連結會帶來潛在的長期隱私風險。一旦活動結束,如果連結仍舊有效,就可能導致隊伍歷史位置或隊員資訊被不經意地長期存取,這與我們「僅在活動期間提供協助」的初衷相悖,也可能增加資料管理的複雜性。

權衡之下,我們最終決定採用 6 碼大寫英數 Token 的設計,並賦予其明確的生命週期。這個決策是基於以下幾個務實的考量:
1. 隱私與安全性優先: Token 與活動綁定,並設定為「跟隨活動結束而過期」(`expires_at TIMESTAMP NULL`),確保了一旦活動結束,該 Token 即刻失效。這是一種內建的自清理機制,有效防止了組隊連結的長期殘留,最大限度保障了用戶的活動數據隱私。
2. 使用者體驗優化: 6 碼的長度,例如「ABCDE2」,既簡短又容易口頭分享或手動輸入,提升了現場組隊的效率。為了避免視覺混淆,我們特地將字元集 (`ABCDEFGHJKLMNPQRSTUVWXYZ23456789`) 排除 `0/O/1/I`,從 36 個字元減少到 32 個,雖然可能略微降低排列組合數量,但大幅提高了辨識度。
3. 資源與維護考量: 藉由 Token 的自動過期機制,我們無需額外開發複雜的連結撤銷或定期清理功能,降低了單人開發與維運的負擔。`join_tokens` 表中 `activity_id` 與 `token` 的聯合唯一性 (`UNIQUE KEY: activity_id, token`) 也確保了每個活動內的 Token 都是獨一無二的。
4. 防暴力破解機制: 儘管 Token 較短,但我們為其部署了必要的安全防線。系統實施了每分鐘 10 次的 IP 速率限制,並在同一 IP 錯誤嘗試 5 次後,將其封鎖 15 分鐘。這雖然不能完全杜絕攻擊,但在資源有限的情況下,為短 Token 提供了合理的安全緩衝。

這個設計最終讓用戶獲得了一個既方便又安心的組隊體驗。車隊領隊可以快速分享組隊碼,隊員也能輕鬆加入,同時所有人都清楚,一旦活動結束,所有與該活動相關的共享入口都會自動關閉。這正是我們期望透過精簡架構、省電無感、直覺易用,來確保使用者不跟丟,同時還能保障他們數據隱私的核心理念。
👉 了解更多關於 FollowMe8 短期活動追蹤定位 App:
https://followme8.ofuyuan.com/