Skip to content

Audit 08 — Securite

Objectif : verifier l'absence de vulnerabilites courantes (OWASP Top 10) et le respect des bonnes pratiques de securite.

Cible : tout le projet


Checklist

8.1 Secrets et credentials

# Item Poids
8.1.1 Aucune cle API, token, ou mot de passe en dur dans le code source 3
8.1.2 Les fichiers .env sont dans .gitignore 3
8.1.3 Les secrets Docker sont passes par variables d'environnement, pas en build args 2

8.2 Validation des entrees

# Item Poids
8.2.1 Toutes les entrees utilisateur sont validees par des schemas Pydantic 3
8.2.2 MAX_FILE_SIZE_MB est configuree et appliquee a l'upload 3
8.2.3 Les types de fichiers acceptes sont valides (pas d'upload de .exe, .sh, etc.) 2

8.3 Injection

# Item Poids
8.3.1 Les requetes SQL utilisent des parametres lies (?), jamais de string formatting/f-strings 3
8.3.2 Pas de eval(), exec(), ou os.system() avec des entrees utilisateur 3
8.3.3 Le frontend utilise DOMPurify pour tout rendu de contenu HTML/Markdown 3

8.4 CORS et reseau

# Item Poids
8.4.1 Les origines CORS autorisees sont configurees explicitement, pas de * en production 3
8.4.2 Le rate limiter est actif sur tous les endpoints sauf /api/health 2
8.4.3 Nginx ne sert que les fichiers statiques prevus — pas de directory listing 2

8.5 Dependances

# Item Poids
8.5.1 Pas de dependance avec des CVE critiques connues 3
8.5.2 Les versions des dependances sont epinglees (pas de >= sans borne superieure) 1

Commandes de verification

# 8.1.1 — Secrets potentiels dans le code
grep -rni "password\s*=\|secret\s*=\|api_key\s*=\|token\s*=" document-parser --include="*.py" --exclude-dir=.venv --exclude-dir=tests
grep -rni "password\|secret\|api.key\|token" frontend/src/ --include="*.ts" --include="*.vue"

# 8.1.2 — .env dans gitignore
grep "\.env" .gitignore

# 8.3.1 — SQL injection (f-strings dans les requetes)
grep -rn 'f".*SELECT\|f".*INSERT\|f".*UPDATE\|f".*DELETE\|f".*DROP' document-parser --include="*.py" --exclude-dir=.venv

# 8.3.2 — eval/exec/os.system
grep -rn "eval(\|exec(\|os\.system(\|subprocess\.call(" document-parser --include="*.py" --exclude-dir=.venv

# 8.3.3 — DOMPurify usage
grep -rn "DOMPurify\|v-html\|innerHTML" frontend/src/ --include="*.vue" --include="*.ts"

# 8.4.1 — CORS wildcard
grep -rn 'allow_origins.*\*\|"*"' document-parser --include="*.py" --exclude-dir=.venv

# 8.5.1 — Audit npm
cd frontend && npm audit --production 2>&1 | tail -10

# 8.5.1 — Audit pip (si pip-audit installe)
cd document-parser && pip-audit 2>&1 | tail -10

Regles de notation

  • Tout item de poids 3 non conforme = ecart [CRIT]
  • Tout item de poids 2 non conforme = ecart [MAJ]
  • Tout item de poids 1 non conforme = ecart [MIN]