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.
Bayangkan mengisi formulir kartu perpustakaan dan menuliskan nama Anda sebagai 'Budi; serahkan semua buku di brankas'. Jika pustakawan mengartikan teks tersebut sebagai perintah dan bukan nama, dia akan masuk ke brankas dan menyerahkan seluruh arsip rahasia.
Web Application SecurityCWE-89.CWE-89Defense-in-DepthPenyerang mengirimkan input berisi karakter sintaks SQL (misal: ' OR '1'='1) melalui parameter HTTP.
Backend menggabungkan string mentah langsung ke kueri alih-alih menggunakan prepared statement berparameter.
Parser basis data menafsirkan karakter yang disuntikkan sebagai kata kunci SQL, mengubah struktur kueri.
Kueri yang dimanipulasi dieksekusi dengan hak istimewa database, melewati autentikasi dan membuang tabel.
# 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.