Files
Password-Manager/server-php
r-zakarya 90ac75525a fix(sync-php): read Authorization via getallheaders and tolerate ETag forms
Apache commonly strips Authorization before PHP sees it, so every request looked unauthenticated on a stock XAMPP and answered 404.

If-None-Match is now compared on the bare hash: a validator that lost its quotes, or a weak W/ tag, would never match and each request would silently re-download the whole snapshot - expensive on mobile data and invisible in the logs, a 200 looking perfectly normal.
2026-08-14 17:58:48 +01:00
..

Endpoint de synchronisation PHP (lecture seule)

Alternative au WebDAV pour distribuer l'instantané chiffré du coffre. Le serveur ne déchiffre rien : il sert des octets opaques.

Installation

  1. Copier config.example.php en config.php, y mettre un jeton :
    php -r "echo bin2hex(random_bytes(32)), PHP_EOL;"
    
  2. Créer le dossier de données hors racine web et y déposer l'instantané produit par l'application Windows (vault-sync.json).
  3. Servir sync.php en HTTPS. Sans TLS, l'endpoint refuse la requête : le jeton circule dans un en-tête à chaque appel.

Utilisation

GET /sync.php
Authorization: Bearer <jeton>
  • 200 — le conteneur chiffré, avec un ETag fort.
  • 304 — si le client renvoie If-None-Match avec l'ETag qu'il détient.
  • 404 — pas encore d'instantané, ou jeton invalide. Les deux répondent pareil : un appelant non authentifié n'apprend pas si quelque chose existe ici.
  • 405 — toute autre méthode. L'écriture viendra avec le client bidirectionnel.

Ce que le serveur voit

Le conteneur est chiffré côté client (PBKDF2-SHA256 600 k + AES-GCM) avec le mot de passe de sync, qui n'est jamais transmis. Un serveur compromis livre donc du chiffré, plus ces métadonnées : la taille du fichier, sa date de modification, et la fréquence des synchronisations.

Le jeton authentifie l'appareil, pas le coffre. Le voler donne accès au chiffré, pas au contenu.

Étape suivante

L'écriture demandera PUT avec If-Match: <etag> — c'est ce qui empêche deux appareils de s'écraser mutuellement. Le client Windows sait déjà le faire : il capture l'ETag à la lecture et rejoue le cycle complet sur un 412 (runSyncNow, borné à 3 tentatives).