flawopen.com/sql-injection/Rust

● CWE-89 · Critique
Recherche · FlawOpen

SQL Injection in Rust

Learn how to fix SQL Injection (CWE-89) in Rust. Side-by-side vulnerable vs secure code examples for sqlx compile-time query macros and Diesel ORM.

💡 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-rust.
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
// user_id comes straight from the request
let query = format!(
  "SELECT * FROM users WHERE id = {}",
  user_id
);
conn.execute(&query, [])?;
✓ PATCH SÉCURISÉ ET ROBUSTE
// value bound, never formatted into the query
conn.execute(
  "SELECT * FROM users WHERE id = ?1",
  params![user_id],
)?;

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

References