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.
Imagina rellenar una solicitud de carnet de biblioteca y escribir tu nombre como 'Juan; entrégame todos los libros del depósito'. Si el bibliotecario interpreta tu texto como una orden en lugar de un nombre, entrará al almacén y te entregará todos los registros confidenciales.
Web Application SecurityCWE-89.CWE-89Defense-in-DepthEl atacante envía caracteres de control SQL (ej. ' OR '1'='1) dentro de un parámetro de solicitud HTTP.
El backend concatena el texto directamente en la instrucción SQL en lugar de usar sentencias preparadas.
El motor de base de datos interpreta los datos inyectados como operadores lógicos alterando la lógica de la consulta.
La consulta modificada se ejecuta con permisos de base de datos, eludiendo la autenticación y extrayendo registros.
# 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.