By Puneetpal Arneja • Published Apr 16, 2026 • Updated Apr 16, 2026

Security Checklist for Mobile Banking Apps (2026)

Mobile banking apps are among the highest-risk software you can build. A single vulnerability can expose millions of users' financial data, trigger regulatory action, and destroy brand trust overnight. This checklist covers every security layer I apply when building or auditing fintech and banking apps—from authentication to incident response.

1. Authentication & Session Management

Authentication is the front door. Most breaches start here—either through weak credentials, stolen tokens, or session fixation. Here's the full checklist:

Token Lifecycle

  • Use short-lived access tokens (15 min) with refresh tokens (7–30 days)
  • Rotate refresh tokens on every use (refresh token rotation)
  • Invalidate all tokens server-side on logout — do not rely on token expiry alone
  • Store access tokens in memory only — never in UserDefaults, NSUserDefaults, or SharedPreferences
  • Store refresh tokens in the iOS Keychain with kSecAttrAccessibleWhenUnlockedThisDeviceOnly
  • Bind tokens to device fingerprint to prevent replay from another device

Biometric & MFA

  • Use Face ID / Touch ID via LocalAuthentication framework as a second factor, not a replacement for server-side auth
  • Never use biometric auth result alone to grant access — always validate against your backend
  • Require MFA for high-value actions: transfers, password changes, new payee addition
  • Implement step-up auth — re-authenticate for sensitive operations within a session
  • Support time-based OTP (TOTP) — avoid SMS OTP where possible (SIM-swap risk)

Session Controls

  • Auto-lock after 5 min inactivity — configurable but defaulted conservatively
  • Clear sensitive UI data (account numbers, balances) when app moves to background
  • Prevent screenshots on sensitive screens using UIScreen.main.isCaptured and UITextField.isSecureTextEntry
  • Limit concurrent sessions per user — alert or force logout older sessions

2. API & Network Security

Transport Security

  • Enforce TLS 1.2+ — reject TLS 1.0/1.1 connections at the server level
  • Implement SSL/TLS certificate pinning — pin to leaf cert hash, not CA root
  • Include a backup pin for cert rotation without forcing an app update
  • Enable App Transport Security (ATS) with no exceptions — never use NSAllowsArbitraryLoads in production
  • Validate the full certificate chain, not just the leaf

Request Integrity

  • Sign API requests with HMAC using a per-session secret — prevents request tampering
  • Include a timestamp nonce in every request to prevent replay attacks (±5 min window)
  • Use Authorization: Bearer <token> headers — never put tokens in query strings
  • Implement request rate limiting on the server — expose to mobile via HTTP 429 with Retry-After
  • Return generic error messages — never expose stack traces, DB errors, or field validation details to the client

3. Data Storage & Encryption

What Goes Where

  • Keychain: Tokens, passwords, private keys, PINs — use kSecAttrAccessibleWhenUnlockedThisDeviceOnly
  • CoreData / SQLite: Financial records — encrypt at rest using SQLCipher or iOS Data Protection class NSFileProtectionComplete
  • UserDefaults: Non-sensitive UI preferences only — never store tokens, account data, or PII here
  • Cached images/PDFs: Encrypt the NSURLCache and mark files with NSFileProtectionComplete
  • Clipboard: Clear clipboard contents containing sensitive data after 60 seconds

Encryption Standards

  • Use AES-256-GCM for symmetric encryption — provides both confidentiality and integrity
  • Use the Secure Enclave for key storage when available (iPhone 5s and later)
  • Never hardcode encryption keys — derive them from user credentials + device-bound secret
  • Wipe sensitive data from memory explicitly after use — zero-fill sensitive byte arrays

4. Device & Runtime Integrity

Jailbreak Detection

Jailbroken devices bypass iOS sandbox protections — Keychain items can be extracted, SSL pinning bypassed, and runtime behavior modified. No detection is 100% reliable, but layered checks raise the cost of attack significantly:

  • Check for presence of /Applications/Cydia.app, /usr/bin/ssh, /bin/bash
  • Attempt to write outside the app sandbox — should fail on non-jailbroken devices
  • Check if fork() succeeds — restricted on non-jailbroken iOS
  • Verify the app's code signature at runtime
  • Use multiple independent checks — don't rely on a single signal
  • On detection: degrade gracefully — warn user, disable high-risk features, log the event server-side

Runtime Attack Detection

  • Detect if a debugger is attached using PT_DENY_ATTACH — terminates debug sessions in production
  • Check for method swizzling on security-critical code paths
  • Detect if running in a simulator — disable production credentials in simulator builds
  • Use DeviceCheck and AppAttest (iOS 14+) to verify app integrity server-side

5. Code Hardening & Obfuscation

  • Enable all compiler security flags: -fstack-protector-all, -D_FORTIFY_SOURCE=2
  • Enable Position Independent Executable (PIE) — randomizes memory layout at runtime
  • Strip debug symbols from release builds — never ship a binary with symbols
  • Obfuscate sensitive string constants (API endpoints, key identifiers) — tools: iXGuard, Dotfuscator
  • Remove all NSLog, print, and debug output in production builds using compile-time flags
  • Disable JavaScript injection if using WKWebView — set allowsContentJavaScript = false unless required
  • Audit third-party SDKs — every SDK you add is an attack surface. Review permissions, data collection, and update cadence

6. Logging — What NOT to Log

Logs are frequently overlooked as an attack vector. On iOS, NSLog output is readable by any app on a jailbroken device. Server logs are often less protected than the app itself.

Never Log

  • Full account numbers, card numbers, CVV
  • Auth tokens, refresh tokens, session IDs
  • Passwords (even hashed)
  • Full API request/response bodies
  • PII: SSN, DOB, full address
  • Biometric data or device identifiers

Safe to Log

  • Event types (login_attempt, transfer_initiated)
  • Masked identifiers (last 4 of account)
  • Error codes and HTTP status codes
  • Request duration and latency
  • Feature flags and A/B experiment IDs
  • Anonymous session IDs (not linked to user)

Server-Side Audit Logging

  • Log all authentication events with timestamp, IP, device fingerprint, and outcome
  • Log all high-value transactions with user ID, amount, and counterparty (masked)
  • Log all admin actions and config changes
  • Ship logs to a SIEM (Splunk, Datadog, AWS CloudWatch) — retain for 90 days minimum
  • Set up alerts for: brute force patterns, impossible travel, unusual transaction volumes

7. Incident Response Readiness

Security without incident response is incomplete. When (not if) something goes wrong, your ability to detect, contain, and communicate quickly determines the outcome.

Kill Switches

  • Build a remote feature flag system — ability to disable any feature without an app update
  • Build a forced-update mechanism — ability to block old app versions immediately
  • Build server-side session revocation — invalidate all sessions for a user or all users instantly

Detection & Response Playbook

  • Define P0/P1/P2 severity levels with response SLAs before launch
  • Assign a security incident owner — single point of accountability
  • Prepare user notification templates for credential exposure scenarios
  • Know your regulatory notification obligations: PCI-DSS requires 72-hour breach notification, GDPR even faster
  • Run tabletop exercises quarterly — simulate a breach scenario with your team

Security Audit Checklist Summary

Short-lived tokens + rotation
Biometric as 2nd factor only
TLS 1.2+ + certificate pinning
HMAC request signing
Keychain with device-only access
AES-256-GCM encryption at rest
Jailbreak detection (layered)
AppAttest for app integrity
Compiler security flags enabled
Symbols stripped from release
No PII in any log output
SIEM with anomaly alerts
Remote kill switches in place
Incident response playbook ready

Related Services & Further Reading

Need a Security Audit for Your Mobile Banking App?

I provide mobile security audits covering all layers in this checklist — authentication, API hardening, storage, runtime integrity, and logging. Get a prioritized report with specific fixes within 2-3 weeks.