MDstable
NoteSnippetChecklistPlaybook

SonarQube & SAST — Analyse Statique de Code

Déploiement SonarQube, configuration des Quality Gates, outils SAST complémentaires (Semgrep, Bandit, Checkmarx) et code review sécurité

snippetintermediate 2026-05-30 5 min read
sonarqubesastsemgrepbanditcode-reviewdevsecopsstatic-analysis

SAST — Concepts

SAST Static Application Security Testing
Analyse du code SOURCE sans lexcuter
Dtecte injections crypto faible secrets mauvaises configs
DAST Dynamic Application Security Testing
Teste l'APPLICATION en cours d'excution
Dtecte vulnrabilits runtime auth sessions
IAST Interactive AST
Agent dans lapplication pendant les tests
Combine SAST DAST
SCA Software Composition Analysis
Analyse les dpendances tierces
Dtecte CVE dans bibliothques licences

SonarQube — Déploiement

yaml
# docker-compose.yml
services:
sonarqube:
image: sonarqube:10-community
ports:
- "9000:9000"
environment:
- SONAR_JDBC_URL=jdbc:postgresql://db:5432/sonar
- SONAR_JDBC_USERNAME=sonar
- SONAR_JDBC_PASSWORD=sonar
- SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true
volumes:
- sonar_data:/opt/sonarqube/data
- sonar_extensions:/opt/sonarqube/extensions
- sonar_logs:/opt/sonarqube/logs
depends_on:
- db
db:
image: postgres:15
environment:
- POSTGRES_USER=sonar
- POSTGRES_PASSWORD=sonar
- POSTGRES_DB=sonar
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
sonar_data:
sonar_extensions:
sonar_logs:
postgres_data:
bash
# Accès : http://localhost:9000
# Login initial : admin / admin → changer immédiatement

Configuration projet

properties
# sonar-project.properties
sonar.projectKey=mon-application
sonar.projectName=Mon Application
sonar.projectVersion=1.0
# Sources
sonar.sources=src
sonar.tests=tests
sonar.exclusions=**/node_modules/**,**/vendor/**,**/*.min.js
# Coverage
sonar.python.coverage.reportPaths=coverage.xml
sonar.javascript.lcov.reportPaths=coverage/lcov.info
sonar.java.coveragePlugin=jacoco
# Encoding
sonar.sourceEncoding=UTF-8
# Qualité de code
sonar.python.version=3.11
bash
# Scanner depuis le projet
sonar-scanner
-Dsonar.host.url=http://localhost:9000
-Dsonar.token=sqp_XXXXXXXXXX
-Dsonar.projectKey=mon-app
# Via Maven
mvn sonarsonar -Dsonar.token=sqp_XXXXXXXXXX
# Via npm
npx sonar-scanner

Quality Gate — Sécurité

# Quality Gate par défaut "Sonar way"
Conditions de blocage
Security Rating A 0 vulnrabilits nouvelles
Reliability Rating A 0 bugs bloquants
Maintainability Rating A
Coverage on New Code > 80
Duplicated Lines on New Code < 3
# Quality Gate strict sécurité
Administration > Quality Gates > Create
Security Rating A
Security Hotspots Reviewed 100
Open Issues Security 0 Blocker/Critical

Types de problèmes SonarQube

| Type | Description | Exemple | |------|-------------|---------| | Bug | Erreur logique | NullPointerException | | Vulnerability | Faille exploitable | SQLi, XSS | | Security Hotspot | À revoir manuellement | Crypto usage | | Code Smell | Dette technique | Méthode trop longue |


Semgrep — SAST Open Source

bash
# Installation
pip install semgrep
# Scan avec règles OWASP Top 10
semgrep --config=p/owasp-top-ten
# Règles spécifiques par langage
semgrep --config=p/python
semgrep --config=p/javascript
semgrep --config=p/java
semgrep --config=p/php
# Règles de sécurité avancées
semgrep --config=p/security-audit
semgrep --config=p/secrets
# Output JSON pour CI
semgrep --config=p/owasp-top-ten --json > resultsjson
# Règle personnalisée
cat > rules/sqli.yaml << 'EOF'
rules
id raw-sql-query
patterns
pattern |
cursorexecute"..." $VAR "..."
message "SQL injection risk: use parameterized queries"
languages python
severity ERROR
metadata
cwe "CWE-89"
owasp "A03:2021"
EOF
semgrep --config=rules/sqli.yaml

Bandit — SAST Python

bash
# Installation
pip install bandit
# Scan basique
bandit -r /src
# Rapport HTML
bandit -r /src -f html -o bandit-report.html
# Rapport JSON (CI/CD)
bandit -r /src -f json -o bandit-report.json
# Niveaux de sévérité filtrés
bandit -r /src -l # Low+
bandit -r /src -ll # Medium+
bandit -r /src -lll # High uniquement
# Ignorer des tests
bandit -r /src --skip B101B601 # B101=assert, B601=shell injection
# Exemples de findings courants
# B301: pickle use → unsafe deserialization
# B303: MD5/SHA1 use → weak crypto
# B501: TLS not verified → SSL bypass
# B601: subprocess with shell=True → command injection
# B703: jinja2 autoescaping disabled → XSS

ESLint Security — JavaScript/TypeScript

bash
# Installation
npm install --save-dev eslint eslint-plugin-security
# .eslintrc.json
"plugins" "security"
"extends" "plugin:security/recommended"
"rules"
"security/detect-sql-injection" "error"
"security/detect-non-literal-regexp" "warn"
"security/detect-eval-with-expression" "error"
"security/detect-child-process" "warn"
"security/detect-unsafe-regex" "error"
# Scan
npx eslint src --ext jsts

Code Review Sécurité — Checklist

AUTHENTIFICATION & SESSIONS
Passwords hashs avec bcrypt/argon2 pas MD5/SHA1
Tokens gnrs avec CSPRNG pas Mathrandom
Sessions invalides au logout ct serveur
MFA disponible sur les comptes privilgis
VALIDATION DES ENTRES
Validation ct serveur pour TOUS les inputs
Requtes SQL paramtres pas de concatnation
chappement HTML pour tout output dans le DOM
Whitelist plutt que blacklist pour la validation
CRYPTOGRAPHIE
Algorithmes approuvs AES-256, RSA-2048+, ECDSA
Pas de cls hardcodes dans le code
Secrets dans les variables denvironnement ou coffre-fort
TLS 12 pour toutes les communications
GESTION DES ERREURS
Pas de stacktrace expose aux utilisateurs
Messages derreur gnriques pas "User not found" vs "Wrong password"
Logging des erreurs sans donnes sensibles pas de passwords en log
DPENDANCES
Dpendances jour npm audit pip-audit, mvn dependencycheck
Pas de dpendances abandonnes ou vulnrables
lock files commits package-lock.json, Pipfilelock

Comparaison outils SAST

| Outil | Langages | Prix | Force | |-------|----------|------|-------| | SonarQube | 30+ | Free/Pro | Intégration CI, dashboard | | Semgrep | 30+ | Free/Pro | Règles custom YAML | | Bandit | Python | Gratuit | Simple, rapide | | Checkmarx | 30+ | Commercial | Précision, compliance | | Fortify | 25+ | Commercial | Enterprise, certifié | | CodeQL | 10+ | GitHub | Analyse flux de données | | ESLint-security | JS/TS | Gratuit | Intégré IDE |

OPS·BRAIN v1.05 notes · DevOpslocal