flawopen.com/sql-injection/Swift

● CWE-89 · Critique
Recherche · FlawOpen

SQL Injection in Swift

Learn how to fix SQL Injection (CWE-89) in Swift. Side-by-side vulnerable vs secure code examples for Vapor Fluent, GRDB.swift, and SQLite.swift prepared statements.

💡 Explication en Langage Simple (ELI5)

Imaginez remplir un formulaire de carte de bibliothèque et écrire votre nom sous la forme 'Jean ; donnez-moi tous les livres du coffre'. Si le bibliothécaire interprète votre texte comme un ordre, il ouvre le coffre et vous remet tous les registres confidentiels.

Concepts Clés et Termes

Web Application Security
Composant d'architecture clé affecté par CWE-89.
CWE-89
Classification standard Common Weakness Enumeration (CWE) pour sql-injection-swift.
Defense-in-Depth
Vérification d'ingénierie multicouche et isolation des limites à l'exécution.

Déroulement de l'Attaque Étape par Étape

Step 1

Soumission de Paramètres SQL Non Fiables

L'attaquant transmet des caractères de syntaxe SQL (ex. ' OR '1'='1) dans un paramètre de requête HTTP.

Step 2

Concaténation Dynamique de Requête SQL

Le serveur concatène directement la chaîne brute dans la requête SQL au lieu d'utiliser des requêtes préparées.

Step 3

Altération de l'Arbre Syntaxique (AST)

L'analyseur SQL interprète les caractères injectés comme des commandes et clauses logiques plutôt que de simples données.

Step 4

Exfiltration ou Altération Non Autorisée

La requête modifiée s'exécute avec les droits de la base de données, contournant l'authentification et exposant les tables.

Code Source : Vulnérable vs Sécurisé

✕ IMPLÉMENTATION VULNÉRABLE
// userId comes straight from user input
let query =
  "SELECT * FROM users WHERE id = \(userId)"
sqlite3_exec(db, query, nil, nil, nil)
✓ PATCH SÉCURISÉ ET ROBUSTE
// value bound, never interpolated
var stmt: OpaquePointer?
sqlite3_prepare_v2(db,
  "SELECT * FROM users WHERE id = ?",
  -1, &stmt, nil)
sqlite3_bind_text(stmt, 1, userId, -1, nil)
sqlite3_step(stmt)

Liste de Contrôle de Sécurité pour l'Ingénierie

References