Repository navigation
fix(cloud): sécuriser les enveloppes et les accès SQL, limiter les lectures - #33
Merged
Merged
Conversation
Keep full reads for local edits, writes, resume and periodic integrity checks. Add metadata race and browser security regressions, threat model, and measured fictional storage/compression study while preserving encrypted V1 backups.
Preserve the existing event trigger and prove automatic RLS still runs. Do not create a replacement helper or widen any client permission.
iPoower
marked this pull request as ready for review
October 25, 2026 06:39
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problème et comportement final
Un CHECK PostgreSQL acceptait UNKNOWN lorsque
kdfvalait JSON null. La contrainte exige désormais un résultat explicitement TRUE : les enveloppes incomplètes sont refusées sans modifier la tête ni l’historique.Le contrôle périodique téléchargeait aussi toute l’enveloppe toutes les 30 secondes, même sans changement. Un appareil à jour lit désormais la seule révision, avec lecture complète au plus tard après dix minutes. Une modification locale, un envoi en attente, une reprise, une action manuelle ou une erreur impose le parcours complet. La lecture légère ne crée aucun reçu et ne change aucune date de sauvegarde confirmée.
Le snapshot V3, la restauration atomique, l’outbox chiffrée, les écritures conditionnelles et leur relecture restent les mécanismes existants. Les enveloppes V1, AES-256-GCM et la séparation progression/session restent compatibles.
Sécurité et mesures
docs/cloud-storage-measures.md.Le helper Supabase préexistant
public.rls_auto_enable()avait aussi un droit d’appel client inutile signalé par deux Advisors. Une migration ciblée retire EXECUTE à PUBLIC/anon/authenticated après vérification de son type/propriétaire. Son code et son event trigger restent intacts ; un test transactionnel prouve que l’auto-RLS fonctionne encore.Validation sur le SHA exact
Tête :
4570c1117bd1c1ae2db82264fd771c077625493a.CI #40117039466 : provenance, Chromium et WebKit réussis. Les suites existantes sont conservées : 23 scénarios contrôleur, 12 groupes transport/chiffrement, 8 groupes SQL/RLS, parcours multi-clients, restauration V3, concurrence multi-onglets, tests pédagogiques et non-régression Pages. Le rapport JSON de stockage est joint aux artifacts Chromium. Audit npm local : aucune vulnérabilité signalée.
La tentative 1 a rencontré un timeout pédagogique WebKit sur un bouton
rc-41masqué, après réussite des suites cloud et mobiles. Une seule relance sur le même SHA a réussi (tentative 2, provenance/Chromium/WebKit) ; aucune assertion n’a été modifiée.Hors CI, la cible Supabase autorisée a été confirmée puis le schéma a été installé depuis ce SQL corrigé. Catalogue, grants, RLS, trigger privé et contraintes validées ont été relus. Les assertions SQL de rôles, révisions et rétention ont réussi dans une transaction fictive intégralement annulée : zéro utilisateur et zéro sauvegarde résiduels. Après restriction du helper d’auto-RLS, le Security Advisor relancé affiche zéro erreur/avertissement/suggestion. Les claims JWT sont simulés pour ces assertions ; ce n’est pas une recette Auth/SMTP ni un essai REST avec des sessions émises.
Livraison et limites
docs/cloud-sync.md,docs/cloud-security-model.md,docs/cloud-storage-measures.mdetTESTING.mddécrivent configuration, récupération, mesures et preuves distinctes. Le SQL exige toujours une inspection des données existantes avant application ; ne pas le réinstaller aveuglément.Aucune fusion, publication Pages, activation OTP personnelle ou transmission de progression réelle. Main et la version publiée restent sur #32. La recette PC ↔ iPhone physique reste à autoriser et à exécuter ; WebKit ne la remplace pas. Une PWA fermée reprend à la réouverture et au déverrouillage.
Après une future autorisation de fusion/publication, un rollback du code passe par une PR de revert contrôlée et les mêmes protections Pages. Ne pas supprimer les tables ni l’historique pour revenir au code précédent ; conserver les exports indépendants.