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]