ScaleRocket/Mobile

Vue d'ensemble de la sécurité

Fondamentaux de la sécurité mobile — différences avec le web, signature d'app, stockage sécurisé et modèles de menaces.

Vue d'ensemble de la sécurité

La sécurité mobile diffère significativement de la sécurité web. Il n'y a pas de Content Security Policy ou CORS, mais vous gagnez la signature d'app, le stockage sécurisé matériel et un environnement sandboxé.

Sécurité web vs mobile

PréoccupationWebMobile
Visibilité du codeJavaScript lisible dans le navigateurBinaire compilé mais décompilable
StockageCookies, localStorage (accessible)Keychain/Keystore (chiffré matériellement)
RéseauCORS, en-têtes CSPCertificate pinning
DistributionURL directeProcessus de revue App Store
IdentitéCookies de sessionCertificats de signature d'app
PermissionsPrompts du navigateurSystème de permissions de l'OS

Modèle de menaces

Menaces spécifiques au mobile :

  1. Rétro-ingénierie — Les attaquants peuvent décompiler votre APK/IPA pour lire le code
  2. Homme du milieu — Le trafic réseau peut être intercepté sur un WiFi non sécurisé
  3. Vol d'appareil — Accès physique à un appareil déverrouillé
  4. Jailbreak/root — Un OS modifié contourne le sandboxing de sécurité
  5. Stockage non sécurisé — Données sensibles stockées en texte clair

Checklist de sécurité

Stockage

  • Stocker les tokens d'auth dans expo-secure-store (pas AsyncStorage)
  • Ne jamais stocker de secrets API dans le bundle de l'app
  • Utiliser des variables d'environnement pour la configuration, pas de valeurs codées en dur
  • Effacer les données sensibles à la déconnexion
import * as SecureStore from "expo-secure-store";

// Bien — stockage chiffré
await SecureStore.setItemAsync("auth-token", token);

// Mal — stockage en texte clair
await AsyncStorage.setItem("auth-token", token);

Réseau

  • Utiliser HTTPS pour tous les appels API (jamais HTTP)
  • Implémenter le certificate pinning pour les apps sensibles
  • Valider toutes les réponses serveur
  • Définir des timeouts de requête

Authentification

  • Utiliser l'authentification biométrique pour les actions sensibles
  • Implémenter l'expiration de session et le rafraîchissement automatique
  • Verrouiller l'app après inactivité
  • Supporter la déconnexion sécurisée qui efface tous les tokens

Code

  • Ne jamais intégrer de clés API ou secrets dans le code JavaScript
  • Utiliser expo-constants pour la configuration spécifique à l'environnement
  • Activer le moteur Hermes (compile le JS en bytecode, plus difficile à lire)
import Constants from "expo-constants";

// Bien — depuis l'environnement
const apiUrl = Constants.expoConfig?.extra?.apiUrl;

// Mal — codé en dur
const apiUrl = "https://my-api.com/secret-key-here";

Build et distribution

  • Signer les builds de release avec des certificats appropriés
  • Activer ProGuard (Android) pour l'obfuscation du code
  • Utiliser l'App Store et le Play Store comme seuls canaux de distribution
  • Activer Play Integrity / App Attest pour la protection API

Paramètres par défaut de ScaleRocket Mobile

ScaleRocket Mobile inclut nativement :

FonctionnalitéImplémentation
Stockage de tokensexpo-secure-store (Keychain/Keystore)
Flux d'authRafraîchissement auto de session, déconnexion sécurisée
HTTPSTous les appels API en TLS
BiométrieOptionnel via expo-local-authentication
Config d'environnementVia extras de app.json

Prochaines étapes

On this page