Rapport d'audit de code statique
Destinataire : Exemple geomacro · Source analysée : https://github.com/blocknine0/geomacro · Date : 2026-10-10 16:14:05
Réalisé par Arthur Grossi EI — audit de code statique · arthhur.grossi@gmail.com
Indice de propreté : 0/100 — Critique
353 571 lignes analysées · 2172 fichiers · 62 constats relevés
Ce que ce document prouve : la présence, à la date indiquée, des constructions listées ci-dessous aux fichiers et lignes cités.
Ce qu'il ne prouve pas : l'absence d'autres vulnérabilités. L'analyse est statique — le code n'est jamais exécuté . Les fichiers de test, exemples et dépendances sont exclus. Les faux positifs possibles sont signalés comme « constats », non comme « vulnérabilités confirmées ».
Constats détaillés
Classés par nombre de constats par fichier. Chaque constat indique la correction attendue.
server/routes/internal/commercial-ops.get.ts 14 constats
Moyen
Écriture HTML directe ligne 121
$('funnelCards').innerHTML=funnelCards.map(([k,v])=>'<div class="card"><div class="k">'+esc(k)+'</div><div class="v">'+esc(v)+'</div></div>').join('');
Correction : textContent, ou assainissement.
Moyen
Écriture HTML directe ligne 128
$('cards').innerHTML=cards.map(([k,v])=>'<div class="card"><div class="k">'+esc(k)+'</div><div class="v">'+esc(v)+'</div></div>').join('');
Correction : textContent, ou assainissement.
Moyen
Écriture HTML directe ligne 137
$('growthTable').innerHTML=growthTable(j.data); $('growthStatusText').innerHTML='<span class="ok">Loaded '+esc(j.data.length)+' draft(s). No external publication performed.</span>'
Correction : textContent, ou assainissement.
Moyen
Écriture HTML directe ligne 138
}catch(e){$('growthStatusText').innerHTML='<span class="danger">'+esc(e.message)+'</span>'}
Correction : textContent, ou assainissement.
Moyen
Écriture HTML directe ligne 147
$('growthStatusText').innerHTML='<span class="ok">Draft '+esc(action)+'d. No external publication performed.</span>';
Correction : textContent, ou assainissement.
Moyen
Écriture HTML directe ligne 149
}catch(e){$('growthStatusText').innerHTML='<span class="danger">'+esc(e.message)+'</span>'}
Correction : textContent, ou assainissement.
Moyen
Écriture HTML directe ligne 155
$('funnelRollup').innerHTML=table(rollup);
Correction : textContent, ou assainissement.
Moyen
Écriture HTML directe ligne 156
$('funnelTable').innerHTML=table(attempts);
Correction : textContent, ou assainissement.
Moyen
Écriture HTML directe ligne 161
if(opsToken.length<32){$('status').innerHTML='<span class="danger">Enter the owner token.</span>';return}
Correction : textContent, ou assainissement.
Moyen
Écriture HTML directe ligne 166
summarize(j.data); renderDeveloperFunnel(j.data); $('usageTable').innerHTML=table(j.data.recent_usage); $('paymentTable').innerHTML=table(j.data.recent_payments); $('usageRollup').
Correction : textContent, ou assainissement.
Moyen
Écriture HTML directe ligne 167
$('content').classList.remove('hidden'); $('status').innerHTML='<span class="ok">Loaded '+esc(j.data.generated_at)+'</span>';
Correction : textContent, ou assainissement.
Moyen
Écriture HTML directe ligne 169
}catch(e){$('status').innerHTML='<span class="danger">'+esc(e.message)+'</span>'}
Correction : textContent, ou assainissement.
… et 2 autre(s) constat(s) dans ce fichier.
scripts/db/check-migration-safety.mjs 3 constats
Élevé
Requête SQL concaténée ligne 245
String.raw`\bdelete\s+from\s+(${qualifiedSqlIdentifier})(?=\s|;|$)`,
Correction : Requêtes paramétrées.
Élevé
Requête SQL concaténée ligne 349
/\bdelete\s+from\b/i.test(
Correction : Requêtes paramétrées.
Élevé
Requête SQL concaténée ligne 375
/\bdelete\s+from\b/gi,
Correction : Requêtes paramétrées.
src/lib/testnet-public-access-contract.ts 3 constats
Critique
Secret probable en dur ligne 7
public_api_key: "gmk_public_arc_testnet_v1",
Correction : Révoquer la clé, la placer en variable d'environnement, purger l'historique Git.
Critique
Secret probable en dur ligne 12
public_api_key: "gmk_public_base_sepolia_v1",
Correction : Révoquer la clé, la placer en variable d'environnement, purger l'historique Git.
Critique
Secret probable en dur ligne 17
public_api_key: "gmk_public_polygon_amoy_v1",
Correction : Révoquer la clé, la placer en variable d'environnement, purger l'historique Git.
scripts/compute-gri-v11.js 2 constats
Élevé
Requête SQL concaténée ligne 888
.insert(rows.slice(i, i + chunkSize));
Correction : Requêtes paramétrées.
Élevé
Requête SQL concaténée ligne 902
const { error } = await supabase.from('gri_contributions').insert(rows.slice(i, i + chunkSize));
Correction : Requêtes paramétrées.
scripts/compute-gri-v12.js 2 constats
Élevé
Requête SQL concaténée ligne 883
.insert(rows.slice(i, i + chunkSize));
Correction : Requêtes paramétrées.
Élevé
Requête SQL concaténée ligne 897
const { error } = await supabase.from('gri_contributions').insert(rows.slice(i, i + chunkSize));
Correction : Requêtes paramétrées.
scripts/ops/b2-compact-structured-event-bundle.mjs 2 constats
Élevé
Requête SQL concaténée ligne 297
const hotBytesBefore = updates.reduce((sum, item) => sum + item.current_bytes, 0);
Correction : Requêtes paramétrées.
Élevé
Requête SQL concaténée ligne 298
const hotBytesAfter = updates.reduce((sum, item) => sum + item.pointer_bytes, 0);
Correction : Requêtes paramétrées.
scripts/validate-gri-v12.js 2 constats
Élevé
Requête SQL concaténée ligne 162
let q = supabase.from(table).select(select).range(from, from + pageSize - 1);
Correction : Requêtes paramétrées.
Élevé
Requête SQL concaténée ligne 341
const { error } = await supabase.from('gri_validation_metrics').insert(rows.slice(i, i + 500));
Correction : Requêtes paramétrées.
scripts/validate-gri.js 2 constats
Élevé
Requête SQL concaténée ligne 162
let q = supabase.from(table).select(select).range(from, from + pageSize - 1);
Correction : Requêtes paramétrées.
Élevé
Requête SQL concaténée ligne 341
const { error } = await supabase.from('gri_validation_metrics').insert(rows.slice(i, i + 500));
Correction : Requêtes paramétrées.
.github/workflows/telegram-b2-d1-consumer.yml 1 constat
Élevé
Requête SQL concaténée ligne 224
npx -y "wrangler@${WRANGLER_VERSION}" d1 execute DB --remote --json --config "$D1_CONFIG" --command "UPDATE telegram_signal_lead_queue SET attempt_count=attempt_count+1,last_attemp
Correction : Requêtes paramétrées.
scripts/audit-agent-hot-topic-readiness.ts 1 constat
Élevé
Requête SQL concaténée ligne 44
let query: any = db.from(table).select(select).range(from, from + pageSize - 1);
Correction : Requêtes paramétrées.
scripts/audit-gdelt-dependency-live.mjs 1 constat
Élevé
Requête SQL concaténée ligne 88
let query = db.from(table).select(select).range(from, from + pageSize - 1);
Correction : Requêtes paramétrées.
scripts/audit-global-production-coverage.mjs 1 constat
Élevé
Requête SQL concaténée ligne 41
let q = db.from(table).select(select).range(from, from + pageSize - 1);
Correction : Requêtes paramétrées.
scripts/audit-global-realtime-intelligence-100.mjs 1 constat
Élevé
Requête SQL concaténée ligne 83
let query = db.from(table).select(select).range(from, from + pageSize - 1);
Correction : Requêtes paramétrées.
scripts/audit-hot-topic-family-readiness.ts 1 constat
Élevé
Requête SQL concaténée ligne 43
let query: any = db.from(table).select(select).range(from, from + pageSize - 1);
Correction : Requêtes paramétrées.
scripts/audit-sovereign-fiscal-production-diagnostics.ts 1 constat
Élevé
Requête SQL concaténée ligne 90
let query: any = db.from(table).select(select).range(from, from + pageSize - 1);
Correction : Requêtes paramétrées.
scripts/audit-ucdp-quality-reasons.ts 1 constat
Élevé
Requête SQL concaténée ligne 34
let query: any = db.from(table).select(select).range(from, from + PAGE_SIZE - 1);
Correction : Requêtes paramétrées.
scripts/commercial/private-pilot-demand-report.mjs 1 constat
Élevé
Requête SQL concaténée ligne 37
const { data, error } = await db.from(table).select(columns).order(orderColumn).range(start, Math.min(start + 499, limit - 1));
Correction : Requêtes paramétrées.
scripts/drain-live-structure.mjs 1 constat
Élevé
Requête SQL concaténée ligne 152
events_updated: outputs.reduce((n, row) => n + Number(row?.events_updated ?? 0), 0),
Correction : Requêtes paramétrées.
scripts/early-warning/ecb-rss-core.mjs 1 constat
Élevé
Requête SQL concaténée ligne 96
.update(`${guid}\n${publishedAt}\n${title}`, "utf8")
Correction : Requêtes paramétrées.
scripts/ingest-gdelt-v2-events-live.mjs 1 constat
Moyen
Hachage faible ligne 278
const exportMd5 = createHash("md5").update(zipBuffer).digest("hex")
Correction : bcrypt / Argon2id.
Intégrité du livrable
Empreinte SHA-256 de l'arborescence source analysée (2172 fichiers, triés, contenu inclus) :
d3baf7ac48d67aa2fa8e5fbb68aae314fb95096a3a8b4fe7394f59d747a42058
Pour vérifier que ce rapport correspond bien à la version analysée : clonez le dépôt dans cet état, puis recalculez l'empreinte des fichiers listés. Toute divergence signifie que le code a changé depuis l'audit — auquel cas ce rapport ne s'applique plus.
Rapport d'audit statique — Arthur Grossi EI · arthhur.grossi@gmail.com
Document produit automatiquement, relu avant livraison. Prix convenu au devis, montant ferme. Aucune donnée du client n'est exécutée ni transmise à un tiers.