fix: corrections de l'audit de sécurité et de robustesse

- VPN retiré : le contrôle reste activé (alerte parent, tunnel remonté après 30 s, autorisation redemandée à l'ouverture)
- Horloge de référence : changer date/heure/fuseau ne contourne plus les plages horaires ni le temps d'écran (signalé au parent)
- Mot de passe : PBKDF2 + attente croissante après 3 échecs ; conversion automatique des anciens hachages
- Écrans protégés : aucun affichage avant chargement des réglages ; effacement du journal protégé
- Signature release via keystore.properties (même clé que les versions publiées)
- Sauvegarde Google : réglages, appairage et journal exclus
- Alerte admin fiable (goAsync), relance refusée signalée, liste d'applis renvoyée à chaque installation, code d'appairage consommé
- Journal thread-safe et sans recopie à chaque ligne ; correctifs lint
- Tests unitaires (mot de passe, règles, versions, config Firebase) ; README aligné sur le comportement réel

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R9CBCVP5oDu2sfoYPisNCQ
This commit is contained in:
tuxgyverandClaude Opus 5.5 committed 2026-10-25 10:49:43 +01:00
1 parent f33776bbb5
commit e269e9932a
37 files changed
+809 -147

No files matched your search

-10
View File
@@ -12,10 +12,8 @@
<!-- Dashboard -->
<string name="dashboard_title">Tableau de bord</string>
<string name="dashboard_consumed">Données consommées</string>
<string name="dashboard_plan_label">Forfait</string>
<string name="dashboard_remaining">Restant</string>
<string name="dashboard_overage">Dépassement</string>
<string name="dashboard_state_label">État des données</string>
<string name="dashboard_state_ok">Sous le forfait</string>
<string name="dashboard_state_warning">Proche du forfait</string>
<string name="dashboard_state_cut">Coupure totale en cours</string>
@@ -30,7 +28,6 @@
<string name="dashboard_reset_now">Réinitialiser le forfait maintenant</string>
<string name="dashboard_reset_confirm_title">Réinitialiser le forfait ?</string>
<string name="dashboard_reset_confirm_message">Le compteur de données consommées sera remis à zéro immédiatement.</string>
<string name="dashboard_permissions_needed">Autorisations requises pour fonctionner correctement</string>
<string name="dashboard_control_disabled">Contrôle désactivé</string>
<string name="dashboard_next_cutoff">Prochaine coupure</string>
<string name="dashboard_cutoff_wifi">Wi-Fi actif (pas de coupure)</string>
@@ -52,8 +49,6 @@
<string name="settings_cutoff_interval">Intervalle de coupure (minutes)</string>
<string name="settings_cutoff_help">Une coupure totale (même pour la liste blanche) se déclenche cycliquement à cet intervalle, que le forfait soit dépassé ou non.</string>
<string name="settings_section_permissions">Autorisations</string>
<string name="settings_perm_usage_access">Accès aux statistiques d\'utilisation</string>
<string name="settings_perm_usage_access_desc">Nécessaire pour mesurer la consommation de données mobiles</string>
<string name="settings_perm_vpn">Pare-feu local (VPN)</string>
<string name="settings_perm_vpn_desc">Nécessaire pour filtrer les applications sur les données mobiles</string>
<string name="settings_perm_notifications">Notifications</string>
@@ -64,7 +59,6 @@
<string name="settings_perm_missing">Manquante</string>
<string name="settings_save">Enregistrer</string>
<string name="settings_edit_date">Modifier</string>
<string name="settings_saved">Réglages enregistrés</string>
<string name="settings_section_security">Sécurité</string>
<string name="settings_password_active">Mot de passe actif — protège la désactivation et les réglages</string>
<string name="settings_password_inactive">Aucun mot de passe défini</string>
@@ -80,11 +74,9 @@
<!-- Verrouillage par mot de passe -->
<string name="password_gate_title">Zone protégée</string>
<string name="password_field_label">Mot de passe</string>
<string name="password_incorrect">Mot de passe incorrect</string>
<string name="password_unlock">Déverrouiller</string>
<!-- About -->
<string name="about_title">À propos</string>
<string name="about_version">Version %1$s</string>
<string name="update_section">Mise à jour</string>
<string name="update_check">Rechercher une mise à jour</string>
@@ -116,8 +108,6 @@
<string name="notification_title">DataControl</string>
<!-- Common -->
<string name="unit_mo">Mo</string>
<string name="unit_euro">€</string>
<string name="common_cancel">Annuler</string>
<string name="common_confirm">Confirmer</string>
+4
View File
@@ -1,4 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Android 11 et avant. Réglages (DataStore), appairage, mot de passe et journal sont propres à cet
appareil : restaurés ailleurs, l'appareil se croirait associé alors que Firestore refuse ses écritures. -->
<full-backup-content>
<exclude domain="sharedpref" path="." />
<exclude domain="file" path="datastore/" />
<exclude domain="file" path="journal.txt" />
</full-backup-content>
@@ -1,6 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Android 12+. Voir backup_rules.xml : rien de propre à l'appareil ne doit être sauvegardé ni transféré. -->
<data-extraction-rules>
<cloud-backup>
<exclude domain="sharedpref" path="." />
<exclude domain="file" path="datastore/" />
<exclude domain="file" path="journal.txt" />
</cloud-backup>
<device-transfer>
<exclude domain="sharedpref" path="." />
<exclude domain="file" path="datastore/" />
<exclude domain="file" path="journal.txt" />
</device-transfer>
</data-extraction-rules>