In this article · 10 sections
Mobile apps live on devices you do not control, talk over networks you cannot trust and handle personal data that people expect you to protect. A single weakness can expose accounts, payments or private messages, and it can also damage trust and bring regulatory trouble. Security cannot be added in the last week before launch. It has to be part of how you design and build.
This checklist covers fifteen essentials, organised by area. It draws on widely used guidance such as the OWASP Mobile Application Security Verification Standard (MASVS) and the OWASP Mobile Top 10, which are good next reads for any team building mobile software. It is a practical starting point, not a replacement for a professional security review on high-risk apps.
A mindset to start with
Assume three things:
- The app can be inspected. Anyone can download your app and analyse it. Never trust the client.
- The device can be compromised, lost or shared.
- The network can be hostile, such as public Wi-Fi.
Design so that a failure at any of these points does not expose everything.
Authentication and sessions
1. Use proven authentication
Do not invent your own login system. Use established identity providers or well-maintained libraries and standards such as OAuth 2.0 and OpenID Connect. Support strong password rules, rate limiting on attempts, and secure password reset flows. Offer multi-factor authentication where the data justifies it.
2. Handle tokens safely
Use short-lived access tokens with refresh tokens, and store them only in secure storage (see below). Invalidate sessions on logout and when users change their password. Make sure the server can revoke access.
3. Add biometrics the right way
Face and fingerprint unlock are convenient. Use the platform’s official biometric APIs, tie them to securely stored credentials, and always provide a fallback. Biometrics should unlock access to a secret, not be the only secret.
Data on the device
4. Store as little as possible
The safest data is data you never keep. Don’t store sensitive information locally unless the feature requires it, and delete it when it is no longer needed.
5. Use secure storage for secrets
Use the platform’s protected storage: Keychain on iOS and the Android Keystore with encrypted preferences or databases on Android. Avoid plain text files, shared preferences without encryption and logs. Be careful that sensitive data is excluded from device backups and screenshots where appropriate.
6. Never hardcode secrets in the app
API keys, passwords and private tokens embedded in your code can be extracted from the app package. Keep secrets on your server and let the app call your server. When a key must exist in the client (for example, a public analytics key), restrict what it can do and where it can be used.
Network communication
7. Encrypt all traffic
Use TLS for every connection and refuse insecure HTTP. Both iOS and Android restrict cleartext traffic by default, so don’t weaken those settings.
8. Consider certificate pinning carefully
Pinning ties your app to specific server certificates or keys, reducing the risk of interception. It also brings operational risk: if certificates change without an update plan, the app can break. If you pin, pin to keys with a backup and have a rotation process, or decide that standard TLS validation is adequate for your threat model.
9. Protect your APIs on the server
This is where most real damage is prevented.
- Authorise every request on the server. Do not rely on hidden buttons or client checks.
- Validate and sanitise all input to prevent injection attacks.
- Rate-limit to slow down abuse and credential stuffing.
- Return minimal data, only what the app needs.
- Avoid exposing internal identifiers that let someone guess other users’ records.
- Log suspicious activity.
For design considerations around server architecture, see our guide on choosing a backend for your app.
Code and dependencies
10. Keep dependencies updated and vetted
Third-party libraries are a common source of vulnerabilities. Use only well-maintained packages, pin versions, scan for known issues with tools such as your package manager’s audit features, and update regularly. Remove libraries you no longer use.
11. Harden your build
- Enable code obfuscation and minification where it makes sense. This slows reverse engineering but does not stop it, so don’t treat it as a security boundary.
- Disable debug options and verbose logging in release builds.
- Protect your signing keys and build pipeline, and restrict who can publish releases.
- Don’t ship test accounts, test endpoints or developer menus.
Privacy and permissions
12. Ask only for permissions you need
Request camera, location, contacts and other permissions only when a feature needs them, and explain why. Fewer permissions mean less risk and more user trust.
13. Be honest in your privacy disclosures
Apple requires privacy information (nutrition labels) and Google Play requires a Data safety section. Make sure they accurately reflect what your app and its third-party SDKs collect. Inaccurate disclosures can cause rejection or removal. Provide a clear privacy policy, and offer account and data deletion where required.
Testing and response
14. Test security before release
Combine several approaches:
- Static analysis and linting to catch common mistakes
- Dependency scanning
- Manual review of authentication, storage and API logic
- Penetration testing by a qualified third party for apps handling sensitive data, payments or health information
- Testing on rooted or jailbroken devices to understand risks. Detection can be bypassed, so treat it as one signal rather than a guarantee.
15. Plan for incidents
Decide before launch how you will respond if something goes wrong.
- Provide a way to report vulnerabilities, such as a security contact email.
- Have a forced-update mechanism so you can retire dangerously old versions.
- Keep logs and monitoring to detect abuse.
- Prepare an incident process: who investigates, who communicates, and how users are notified, including any legal notification duties in your regions.
The checklist at a glance
- Proven authentication and strong session handling
- Short-lived tokens, revocable on the server
- Biometrics used via official APIs with fallback
- Minimal local data storage
- Keychain / Keystore for secrets
- No hardcoded secrets in the app
- TLS everywhere
- Pinning decision made and documented
- Server-side authorisation, validation and rate limiting
- Dependencies audited and updated
- Release build hardened; debug features removed
- Minimal permissions with clear explanations
- Accurate privacy disclosures and policy
- Security testing completed
- Incident and update plan ready
Common mistakes
- Trusting the client for permissions or pricing logic
- Logging sensitive data in analytics or crash reports
- Using one API key for everything
- Ignoring third-party SDK behaviour and the data they collect
- Skipping security because “we’re too small to be a target”: automated attacks do not care about your size
Final thoughts
Strong mobile security is the sum of many small, sensible decisions: keep data minimal, protect secrets, verify everything on the server and plan for the day something fails. Build these habits into your process from the start, as part of your MVP plan, not as an afterthought. If you would like an experienced team to build or review your app with security in mind, see our app development service or contact us.