Spaces:
Runtime error
Runtime error
Commit History
-
fix(validation): trois utilitaires de securite qui ne validaient rien
is_file_size_valid comparait des megaoctets arrondis a deux decimales. Tout fichier de moins de ~5 Ko donnait 0.0 et etait rejete comme "File is empty (0 bytes)" — un decret d'une page pese souvent moins. A l'autre bout, 50,004 Mo s'arrondissait a 50.0 et passait sous la limite. Les deux comparaisons portent desormais sur les octets. sanitize_sql_input interpolait les mots-cles bruts dans rf"\b{kw}\b". La liste contient "--", "/*", "*/", "xp_" et "sp_" : "*/" donnait "\b*/\b", motif invalide (re.error: nothing to repeat). La fonction levait pour TOUTE entree non vide — elle n'a jamais assaini quoi que ce soit. Trois formes de motif selon la nature du mot-cle, et re.escape. sanitize_filename ne retirait que les points en tete : "../../etc/passwd" ressortait en "_.._etc_passwd", qui contient encore la remontee que la fonction existe pour neutraliser. Toute suite de deux points est reduite a un point. sanitize_html retirait la balise <script> mais gardait son corps : "alert(1)" se retr…4806809 -
Etape 11 : authentification reelle branchee (demande n°2)
app/core/auth.py (188 lignes, JWT + bcrypt + roles) etait complet et importe par PERSONNE. Les 9 endpoints d'administration passaient par deux stubs renvoyant {"id": 1, "role": "admin"} : ils etaient ouverts a tous. BUG BLOQUANT decouvert en chemin : passlib 1.7.4 (derniere version, 2020) est incompatible avec bcrypt >= 4.1 — il lit bcrypt.__about__.__version__, supprime depuis. Avec bcrypt 5.x installe, hash_password echouait avec "password cannot be longer than 72 bytes" MEME pour 13 caracteres : l'authentification aurait ete inutilisable telle que declaree. -> bcrypt utilise directement, passlib retire des manifestes. Pre-hachage SHA-256 + base64 avant bcrypt : entree de longueur fixe, donc support des phrases de passe longues sans la troncature silencieuse a 72 octets de bcrypt (deux mots de passe partageant leurs 72 premiers octets etaient equivalents). Ajouts : - app/api/routes/auth.py : POST /login (formulaire OAuth2, l'URL exacte attendue par oauth2_scheme, donc le…da2ad52
-
chore: initial standalone backend for JuriX API (Render)
9cf9a2a