docling-studio/docs/audit/reports/release-0.3.1/08-security.md
Pier-Jean Malandrino f6030bb2f1 fix(docs): resolve mkdocs strict mode build failure (#145)
- Add all process docs to mkdocs.yml nav (15 missing pages)
- Replace relative links to files outside docs/ with absolute GitHub URLs
- Add docs/audit/ directory (templates + reports)
- Add validation config to allow unlisted audit reports as info-level
2026-04-10 15:11:29 +02:00

2 KiB

Rapport d'audit : Securite

Release : 0.3.1 Date : 2026-04-10 Auditeur : claude-code


Score de compliance

Metrique Valeur
Items conformes 13 / 14
Score 97 / 100
Ecarts CRITICAL 0
Ecarts MAJOR 0
Ecarts MINOR 1
Ecarts INFO 1

Ecarts constates

[MIN] python-multipart>=0.0.12 sans borne superieure

  • Localisation : document-parser/requirements.txt
  • Constat : python-multipart>=0.0.12 n'a pas de borne superieure, contrairement aux autres dependances.
  • Regle violee : 8.5.2 — Les versions des dependances sont epinglees
  • Remediation : Ajouter <1.0.0 pour la coherence.

[INFO] Mismatch nginx client_max_body_size 5M vs MAX_FILE_SIZE_MB=50

  • Localisation : nginx.conf, frontend/nginx.conf, infra/settings.py
  • Constat : Nginx rejette les uploads > 5MB avant que le backend (configure a 50MB par defaut) ne les voie. Pas un probleme de securite (plus restrictif), mais un probleme de coherence fonctionnelle.
  • Remediation : Aligner nginx client_max_body_size avec MAX_FILE_SIZE_MB ou rendre configurable.

Points positifs

  • Zero secret hardcode dans le code source — tout via env vars
  • .env dans .gitignore (+ .env.local, .env.production)
  • Secrets Docker passes via environment:, pas build: args:
  • Toutes les entrees validees par schemas Pydantic avec validators
  • MAX_FILE_SIZE_MB enforce en double couche (eager check + streaming check)
  • Validation de contenu PDF par magic bytes, pas seulement par extension
  • SQL parametrise partout (? placeholders), zero f-string SQL
  • Zero eval(), exec(), os.system() dans le code
  • DOMPurify utilise sur l'unique v-html (MarkdownViewer)
  • CORS explicitement configure, pas de wildcard *
  • Rate limiter actif sur tous les endpoints sauf /api/health
  • Nginx sans autoindex, avec headers de securite
  • Dependances recentes sans CVE critiques connues

Verdict partiel : GO