fix(audit): fermer les frontieres restantes
This commit is contained in:
@@ -115,7 +115,7 @@ Dans cet ordre, parce qu'ils dépendent tous de `DB-002` :
|
||||
|---|---|---|
|
||||
| `DB-004` | Retirer `create_all()` de `create_app()` | Tant qu'il est là, deux mécanismes décrivent le schéma |
|
||||
| `DB-005` | Cascades de suppression au niveau base | Les cascades ORM sont en place ; PostgreSQL ne les connaît pas |
|
||||
| `DB-006` | Unicité sur `TryoutRegistration(tryout_id, player_id)` | Le plafond d'inscriptions est aujourd'hui un `count()` suivi d'un `add()` : deux requêtes simultanées passent toutes les deux |
|
||||
| `DB-006` | Unicité sur `TryoutRegistration(tryout_id, player_id)` | Les deux routes verrouillent désormais la ligne `Tryout` avant le contrôle de doublon, le `count()` et l'`add()` : PostgreSQL sérialise donc leurs décisions de capacité. La contrainte reste nécessaire pour les scripts, imports et futurs chemins d'écriture qui ne passent pas par ces routes |
|
||||
| `DB-007` | Index, `CheckConstraint` sur les statuts, `server_default` | — |
|
||||
| `DB-008` | Trancher `attendance_confirmed` côté tryout | `discord_bot.py` écrit un attribut fantôme ; aujourd'hui journalisé en avertissement |
|
||||
| `DB-009` | Horodatages avec fuseau | `datetime.utcnow` partout, déprécié en 3.12 |
|
||||
|
||||
+6
-6
@@ -282,11 +282,11 @@ have sent new contracts to a new tree and made the existing ones unreadable
|
||||
`logs/` and `backups/` were built from `os.getcwd()` too (OBS-006), and the
|
||||
backup script kept its own copy of the document path — so it archived
|
||||
`./documents` no matter what `DOCUMENTS_ROOT` said. Following prerequisite 2
|
||||
was therefore enough, on its own, to make every contract backup empty; the
|
||||
script prints `No documents directory…` and still exits 0, so a scheduled
|
||||
task watching the exit code would have seen green indefinitely. All three
|
||||
roots now come from `app/storage.py`, and the backup run prints the document
|
||||
source it used.
|
||||
was therefore enough, on its own, to make every contract backup empty. All
|
||||
three roots now come from `app/storage.py`, and the backup run prints the
|
||||
document source it used. A missing or unarchivable document store makes the
|
||||
run exit non-zero even when the database dump itself is valid, so a scheduler
|
||||
cannot report a database-only recovery point as a complete backup.
|
||||
|
||||
**After setting `DOCUMENTS_ROOT` on the node, run the backup once by hand**
|
||||
and check the `Document source:` line and the size of the resulting
|
||||
@@ -327,4 +327,4 @@ Monitor these logs regularly for suspicious activity.
|
||||
- Run `python security_scan.py` after any configuration changes
|
||||
- Test backup restoration quarterly
|
||||
- Review and rotate `SECRET_KEY` if compromised
|
||||
- Keep Python and system packages updated
|
||||
- Keep Python and system packages updated
|
||||
|
||||
Reference in New Issue
Block a user