docs(audit): sync 6c status — 6c-1/2/3/9 done, 6c-4 moot, order table + verdict
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+26
-22
@@ -182,12 +182,12 @@ stricte ; incohérence de **format** pré-existante (serveur `'yyyy-mm-dd
|
|||||||
hh:nn:ss'` vs export JS `toISOString()` avec `T…Z`) sur les rares rows sans
|
hh:nn:ss'` vs export JS `toISOString()` avec `T…Z`) sur les rares rows sans
|
||||||
`created_at`.
|
`created_at`.
|
||||||
|
|
||||||
> ⚠️ **MAJ 2026-07-16 — « Tout est désormais UTC » était inexact.** La passe de
|
> ⚠️ **MAJ 2026-07-16 — « Tout est désormais UTC » était inexact, puis corrigé.**
|
||||||
> substitution a couvert les sites d'écriture *d'entries/attachments*, mais a
|
> La passe de substitution avait raté **`PM.Session.CreateSession`**
|
||||||
> raté **`PM.Session.CreateSession`** (`FormatDateTime(..., IncHour(Now, 24))`,
|
> (`FormatDateTime(..., IncHour(Now, 24))`, heure locale). ✅ **Corrigé en
|
||||||
> heure locale), qui reste à ce jour le dernier `FormatDateTime(..., Now)` du
|
> §6c-2** (`IncHour(NowUTC, 24)` + `Authenticate` sur `NowUTC`). C'était le
|
||||||
> backend. Conséquence réelle sur les fuseaux négatifs. Détail + correctif en
|
> dernier `FormatDateTime(..., Now)` du backend → §2.2 est maintenant réellement
|
||||||
> **§6c-2**.
|
> clos.
|
||||||
|
|
||||||
### 2.3 🟡 `catch (_) {}` silencieux en cascade
|
### 2.3 🟡 `catch (_) {}` silencieux en cascade
|
||||||
|
|
||||||
@@ -729,6 +729,12 @@ l'a déjà fait (et après **6c-2** les deux sont sur la même base de temps).
|
|||||||
|
|
||||||
### 6c-4. 🟡 `/migrate-kdf` rétrograderait un compte `-v2` (verrouillage définitif)
|
### 6c-4. 🟡 `/migrate-kdf` rétrograderait un compte `-v2` (verrouillage définitif)
|
||||||
|
|
||||||
|
> ⛔ **SANS OBJET depuis 6c-1 (2026-07-16).** Le chemin migrate-kdf est
|
||||||
|
> désactivé côté client (fonction `runKdfMigration` supprimée, triggers
|
||||||
|
> retirés). L'endpoint reste inerte (rien ne l'appelle) → ce scénario de brick
|
||||||
|
> n'est plus atteignable. Garde à ré-ajouter uniquement si migrate-kdf revenait
|
||||||
|
> un jour.
|
||||||
|
|
||||||
Le garde d'idempotence ([Auth.pas:722](delphi-backend/Handlers/PM.Handler.Auth.pas:722))
|
Le garde d'idempotence ([Auth.pas:722](delphi-backend/Handlers/PM.Handler.Auth.pas:722))
|
||||||
ne court-circuite que si l'algo vaut `pbkdf2-sha256`. Un compte `argon2id-v2` ou
|
ne court-circuite que si l'algo vaut `pbkdf2-sha256`. Un compte `argon2id-v2` ou
|
||||||
`pbkdf2-sha256-v2` **passe au travers** et se fait réécrire en
|
`pbkdf2-sha256-v2` **passe au travers** et se fait réécrire en
|
||||||
@@ -938,15 +944,15 @@ Le second est correct **dans les deux cas** (no-op si c'était déjà le défaut
|
|||||||
|
|
||||||
### Ordre d'application suggéré
|
### Ordre d'application suggéré
|
||||||
|
|
||||||
| # | Sévérité | Effort | Note |
|
| # | Sévérité | Effort | État (2026-07-16) |
|
||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
| **6c-1** | 🔴 | Élevé | Le seul à pouvoir détruire des données. Faire l'extraction + les tests. |
|
| **6c-1** | 🔴 | — | ✅ **Fait** — chemin migrate-kdf désactivé (option ultra) au lieu de réparé. |
|
||||||
| **6c-2** | 🟠 | Trivial | 2 lignes. Ferme aussi le trou de §2.2. |
|
| **6c-2** | 🟠 | — | ✅ **Fait** — `expires_at` en UTC. Ferme §2.2. |
|
||||||
| **6c-3** | 🟡 | Faible | Signature inchangée, aucun call-site touché. |
|
| **6c-3** | 🟡 | — | ✅ **Fait** — CSRF lié à la session présentée (token_hash). |
|
||||||
| **6c-9** | ❓ | Trivial | 1 ligne, correcte dans tous les cas. |
|
| **6c-9** | ❓ | — | ✅ **Fait** — `ForeignKeys=On` explicite. |
|
||||||
| **6c-4** | 🟡 | Trivial | 4 lignes, garde local. |
|
| **6c-4** | 🟡 | — | ⛔ **Sans objet** — l'endpoint migrate-kdf est inatteignable depuis 6c-1. |
|
||||||
| **6c-5** | 🔵 | Trivial | 5 lignes × 2 endroits. |
|
| **6c-5** | 🔵 | Trivial | À faire — 5 lignes × 2 endroits (fail-fast params Argon2). |
|
||||||
| **6c-6/7/8** | 🔵 | Faible | Cohérence / hygiène, aucune urgence. |
|
| **6c-6/7/8** | 🔵 | Faible | À faire — cohérence / hygiène, aucune urgence. |
|
||||||
|
|
||||||
Rappel build : tout edit JS impose `delphi-backend\assets\BuildAssets.cmd` **puis**
|
Rappel build : tout edit JS impose `delphi-backend\assets\BuildAssets.cmd` **puis**
|
||||||
le build Delphi, sinon l'exe garde les anciens assets.
|
le build Delphi, sinon l'exe garde les anciens assets.
|
||||||
@@ -971,11 +977,9 @@ fuit ».
|
|||||||
|
|
||||||
**MAJ 2026-07-16** : la revue backend Delphi (**§6c**) ne remet pas en cause ce
|
**MAJ 2026-07-16** : la revue backend Delphi (**§6c**) ne remet pas en cause ce
|
||||||
verdict sur le **durcissement** — aucune injection, autorisation scopée partout,
|
verdict sur le **durcissement** — aucune injection, autorisation scopée partout,
|
||||||
routes non authentifiées correctes, crypto saine. Elle sort en revanche un
|
routes non authentifiées correctes, crypto saine. Le **🔴 de perte de données**
|
||||||
**🔴 de perte de données** resté invisible parce qu'il ne vit sur aucun des axes
|
(`/migrate-kdf` re-chiffrait 1 blob sur 8, **§6c-1**) est **traité** : chemin
|
||||||
suivis : `/migrate-kdf` change la clé AES mais ne re-chiffre qu'un blob sur huit
|
désactivé (les 2 comptes étaient déjà à 600k, jamais mordu). Faits aussi :
|
||||||
(**§6c-1**) — nouvelle instance de la classe §3.3, sur un call-site que la
|
expiry session UTC (**§6c-2**, clôt §2.2), CSRF lié à la bonne session
|
||||||
checklist « Entry payload » du CLAUDE.md ne liste pas. Elle corrige aussi une
|
(**§6c-3**), `foreign_keys` explicite (**§6c-9**). Reste du confort/hygiène
|
||||||
affirmation de **§2.2** (« Tout est désormais UTC ») : `PM.Session` avait été
|
(**§6c-5/6/7/8**), sans urgence.
|
||||||
raté par la substitution (**§6c-2**). À traiter avant de considérer §2.2 comme
|
|
||||||
clos.
|
|
||||||
|
|||||||
Reference in New Issue
Block a user