User-provided inputs must be sanitized before being used to generate a SQL database query. An untrusted input can be intentionally built by an attacker in order to run unwanted query statements, possibly allowing the attacker to read, modify, or delete database content.
1// Noncompliant: User data is being used in SQL query
2fun noncompliant(connection: Connection): ResultSet {
3 print("Enter your userId:")
4 val userId = readLine()
5 val query = "SELECT * FROM users WHERE userId = '$userId'"
6 val statement = connection.createStatement()
7 return statement.executeQuery(query)
8}
1// Compliant: Hardcoded value is being passed to SQL query
2fun compliant(connection: Connection): ResultSet {
3 val userId = "hardcoded_value"
4 val query = "SELECT * FROM users WHERE userId = '$userId'"
5 val statement = connection.createStatement()
6 return statement.executeQuery(query)
7}