flawopen.com/sql-injection/Ruby

● CWE-89 · Critique
Recherche · FlawOpen

SQL Injection in Ruby

Learn how to fix SQL Injection (CWE-89) in Ruby. Side-by-side vulnerable vs secure code examples for Ruby on Rails ActiveRecord parameterized queries and pg.

💡 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-ruby.
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
# params[:id] straight into the string
User.where(
  "id = #{params[:id]}"
)
✓ PATCH SÉCURISÉ ET ROBUSTE
# value bound, never interpolated
User.where(
  "id = ?", params[:id]
)
# or, more idiomatic still:
User.where(id: params[:id])

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

References