App 資安基本功:登入與 token、敏感資料、API 授權與第三方 SDK,業主該問的事
很多業主談到 App 資安,第一個反應是「我們又不是銀行,應該不會被盯上」。但實務上常見的 App 資安事件,很少是電影裡的高深入侵,而是更基本的疏漏:離職員工的帳號還能登入、使用者換手機後舊手機仍保持登入、改一下請求內容就能看到別人的訂單。
這些問題的共通點是:業主不需要懂技術,也能在開發前問對問題、在驗收時要求看證據。本文不教攻擊手法,而是從業主的角度說明 App 資安的基本功。
以下依序說明帳號登入與 token、敏感資料儲存、API 授權、第三方 SDK 的風險,以及資安檢測該安排在什麼時機。
先搞懂一件事:App 端的一切都可能被看見
網站的程式大多在伺服器上執行,使用者看不到;App 則是整包安裝在使用者手機裡。這代表:
- App 裡的程式碼可以被拆開來研究,寫死在裡面的金鑰、測試帳號、隱藏的管理功能都可能被找到。
- App 送出的請求可以被攔截與修改,使用者可以繞過 App 畫面,直接對你的伺服器送請求。
- 手機存放的資料不一定安全,手機遺失、借人使用或被安裝惡意程式時,資料可能被讀取。
所以 App 資安的核心原則只有一句:不信任手機端,所有重要的判斷都在伺服器做。後面每一段,都是這個原則的延伸。
帳號登入與 token 管理
使用者登入後,App 通常會拿到一組代表登入身分的憑證,一般稱為 token。之後每次向伺服器要資料,都帶著這組 token 證明「我是誰」。token 管理不好,等於把家門鑰匙交出去卻收不回來。
業主可以向開發團隊確認這些事:
- token 有沒有有效期限? 短效期的存取憑證搭配可更新的機制,比永久有效的 token 安全。
- 登出時 token 會不會在伺服器端失效? 只在手機端刪掉不算登出。
- 改密碼、帳號停權時,所有裝置會不會被強制登出?
- 使用者能不能看到自己登入中的裝置並遠端登出?
- 登入有沒有防暴力嘗試的機制? 例如連續失敗後暫時鎖定或要求額外驗證。
- 重要操作要不要再次驗證? 例如修改綁定電話、提領、刪除帳號時再輸入一次密碼或驗證碼。
如果 App 要提供 Google、Apple 或 LINE 登入,第三方登入的串接與帳號合併有自己的眉角,可以參考社群登入與 SSO 指南。
敏感資料存哪裡、存多久
第一個問題不是「怎麼加密」,而是「這筆資料真的需要存在手機上嗎?」能不存就不存,是最有效的保護。
敏感資料自查清單
業主可以拿這份清單,逐項請開發團隊回答:
- 密碼:手機上不應存放明文密碼,伺服器端也只存經過雜湊處理的結果。
- token 與憑證:存放在系統提供的安全儲存區(iOS 的 Keychain、Android 的 Keystore 機制),而不是一般設定檔。
- 個人資料:身分證字號、地址、病歷等,是否只在需要時從伺服器讀取、用完不留在手機。
- 快取與暫存:畫面截圖、暫存圖片、日誌中有沒有夾帶個人資料。
- App 中的金鑰:第三方服務的私密金鑰不應寫在 App 裡,而是由伺服器代為呼叫。
- 資料傳輸:所有連線都走加密連線,不允許退回未加密的方式。
- 保存期限:伺服器上的資料保存多久,到期如何刪除。
蒐集哪些個人資料、為什麼蒐集,也要寫進隱私權政策並在商店上如實揭露,可以參考隱私權政策與個資法重點。
API 授權:權限一定要在伺服器檢查
App 畫面上「看不到某個按鈕」,不等於使用者「做不到那件事」。如果伺服器只是照單全收 App 送來的請求,有心人只要修改請求內容,就可能看到別人的訂單、改到別人的資料,甚至執行管理員才能做的操作。
業主要確認的原則:
- 每一個 API 都要檢查「這個人能不能對這筆資料做這件事」,而不是只檢查有沒有登入。
- 不能用 App 送來的使用者編號判斷身分,身分要從 token 在伺服器端解出來。
- 管理功能與一般使用者功能分開,管理後台不要放在同一個 App 裡用隱藏按鈕切換。
- 限制請求頻率,避免被大量查詢或自動化濫用。
- 錯誤訊息不要洩露過多資訊,例如不要回傳完整的系統錯誤內容。
角色與權限怎麼規劃,可以參考使用者角色與權限設計。驗收時,最直接的檢查方式是:用 A 帳號登入,嘗試存取 B 帳號的資料,確認伺服器會拒絕。
第三方 SDK:方便,也帶來看不見的風險
App 常會整合許多第三方套件,例如分析工具、廣告、推播、地圖、客服聊天。每多一個 SDK,就多一個你沒有完全掌控的程式在使用者手機上運作。
需要注意的風險:
- 資料蒐集超出預期:某些 SDK 會自行蒐集裝置資訊或位置,而你在隱私權政策與商店資料說明中可能沒有揭露。
- 權限需求擴大:整合某個 SDK 後,App 突然要求更多手機權限。
- 套件本身的漏洞:舊版本套件可能有已知的安全問題。
- 停止維護:SDK 供應商停止更新,與新版作業系統不相容。
業主可以要求開發團隊提供一份第三方套件清單:名稱、用途、蒐集哪些資料、目前版本、由誰負責更新。新增 SDK 前先問「真的需要嗎?有沒有更輕量的做法?」上線後則要定期檢查更新,這部分屬於App 上線後的維護與系統更新的一環。
資安檢測:什麼時候做、做什麼
資安不是上線前最後一週才補的工作。建議依階段安排:
- 規劃階段:在需求文件中寫出要保護的資料、角色權限、登入方式與資安驗收項目。
- 開發階段:程式碼審查時納入資安檢查,套件引入前先確認來源與維護狀態。
- 上線前:針對登入、API 授權、資料儲存做重點檢測;若涉及金流、健康等敏感資料,安排獨立的第三方檢測。
- 重大改版時:新增登入方式、新的資料類型或新的第三方串接,都應重新檢測相關範圍。
- 上線後定期:檢查套件更新、伺服器設定、異常登入紀錄。
檢測的參考依據可以採用業界通行的行動應用資安檢測項目,或依產業主管機關的規範。實際要做到什麼程度,建議依資料敏感程度與合作對象要求,諮詢資安專業人士。
檢測完成後的重點不是拿到一份報告,而是每一項發現都有人負責修正、修正後有人複驗。資安驗收可以併入整體驗收流程,做法參考軟體驗收怎麼做。
與網站資安的分工
如果你同時經營官網,網站本身的資安重點,例如主機與後台帳號、外掛更新、加密連線、備份,可以參考企業網站資安基本功。App 與網站常共用同一套後端與 API,所以伺服器端的權限檢查與帳號管理,兩邊要用同一套標準,而不是 App 做得嚴、網站留後門。
App 的資安做得好不好,業主未必看得出來,但出事時一定首當其衝。NETVANA 開發 App 時,會在規劃階段就把登入與 token 管理、伺服器端權限檢查、敏感資料儲存與第三方套件清單列入規格與驗收項目;軟體服務一律採詢問報價制,依 App 的資料敏感程度與範圍評估。想檢視你的 App 規劃或既有 App 的資安基本功,歡迎與我們聯絡,服務內容可參考軟體服務介紹。
延伸閱讀:官網的資安怎麼顧,看企業網站資安基本功;第三方登入怎麼串,看社群登入與 SSO 指南;角色與權限怎麼切,看使用者角色與權限設計;個資告知與隱私權政策,看隱私權政策與個資法重點;上線後的套件與系統更新,看App 上線後的維護與系統更新。