Thiết bị có thể bị mất, root/jailbreak, hoặc app bị dịch ngược → không được coi client là môi trường tin cậy.
Lưu trữ nhạy cảm:
- Token/mật khẩu/khóa để trong kho an toàn của OS: Android Keystore (hoặc EncryptedSharedPreferences), iOS Keychain. RN dùng react-native-keychain, Flutter dùng flutter_secure_storage.
- Không để bí mật trong SharedPreferences/AsyncStorage plaintext, trong code, hay commit vào repo.
Truyền dữ liệu:
- Luôn HTTPS/TLS; cân nhắc certificate pinning cho app nhạy cảm.
Nguyên tắc khác:
- Không tin client: xác thực/uỷ quyền và validate lại ở server (client-side chỉ để UX).
- Tối thiểu hóa dữ liệu và quyền; không log thông tin nhạy cảm.
- Cân nhắc sinh trắc học (biometric) cho thao tác quan trọng, và kiểm tra tính toàn vẹn (Play Integrity/App Attest) khi cần.
Hay hỏi: vì sao API key nhúng trong app không bao giờ thật sự bí mật.