flawopen.com/sql-injection/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.
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.
Web Application SecurityCWE-89.CWE-89Defense-in-DepthL'attaquant transmet des caractères de syntaxe SQL (ex. ' OR '1'='1) dans un paramètre de requête HTTP.
Le serveur concatène directement la chaîne brute dans la requête SQL au lieu d'utiliser des requêtes préparées.
L'analyseur SQL interprète les caractères injectés comme des commandes et clauses logiques plutôt que de simples données.
La requête modifiée s'exécute avec les droits de la base de données, contournant l'authentification et exposant les tables.
# params[:id] straight into the string
User.where(
"id = #{params[:id]}"
)
# value bound, never interpolated
User.where(
"id = ?", params[:id]
)
# or, more idiomatic still:
User.where(id: params[:id])
order() or dynamic SQL fragments.