flawopen.com/sql-injection/Kotlin
Learn how to fix SQL Injection (CWE-89) in Kotlin. Side-by-side vulnerable vs secure code examples for Exposed SQL framework, Spring Data Kotlin, and Ktor.
Imagine preencher uma ficha na biblioteca e escrever seu nome como 'João; entregue todos os livros do cofre'. Se a bibliotecária interpretar o texto como uma ordem e não um nome, ela vai até o cofre e entrega todos os registros confidenciais.
Web Application SecurityCWE-89.CWE-89Defense-in-DepthO invasor envia dados contendo sintaxe SQL (ex: ' OR '1'='1) através de um parâmetro HTTP.
O backend concatena a string bruta diretamente no comando SQL em vez de usar prepared statements parametrizados.
O parser do banco de dados interpreta os caracteres injetados como comandos SQL em vez de valores literais.
A consulta alterada é executada com privilégios do banco, contornando login ou vazando tabelas inteiras.
// userId comes straight from user input
val query =
"SELECT * FROM users WHERE id = $userId"
val cursor = db.rawQuery(query, null)
// value bound, never templated in
val cursor = db.rawQuery(
"SELECT * FROM users WHERE id = ?",
arrayOf(userId)
)
SQLiteDatabase.query() instead of rawQuery() when the query shape allows it.rawQuery(), always pass values via the selection-args array — never a string template.exec() with built strings.