Seguridad en aplicaciones Kotlin: top 10 vulnerabilidades para principiantes

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Seguridad de aplicaciones Kotlin: top-10 vulnerabilidades para principiantes



Kotlin es un lenguaje de programación moderno que se utiliza activamente para crear aplicaciones Android, soluciones de servidor y proyectos multiplataforma. Sin embargo, incluso con su tipado estricto y seguridad por defecto, los desarrolladores novatos suelen cometer errores que pueden provocar vulnerabilidades graves. En este artículo analizaremos el top-10 de los problemas de seguridad más comunes en aplicaciones Kotlin, mostraremos ejemplos de código peligroso y daremos recomendaciones para solucionarlos.



1. Inyección SQL (SQL Injection)

Una de las vulnerabilidades más antiguas y peligrosas. Si concatenas directamente la entrada del usuario en una consulta SQL, un atacante puede ejecutar comandos arbitrarios.



// PELIGROSO: concatenación de cadenasval query = "SELECT * FROM users WHERE name = '$userInput'"statement.executeQuery(query)

// SEGURO: uso de consultas parametrizadasval query = "SELECT * FROM users WHERE name = ?"val preparedStatement = connection.prepareStatement(query)preparedStatement.setString(1, userInput)preparedStatement.executeQuery()


2. Almacenamiento inseguro de contraseñas

Nunca almacenes contraseñas en texto plano. Usa bcrypt, Argon2 o PBKDF2. En Kotlin puedes usar la librería spring-security-crypto o kotlinx-serialization con hashing.



// PELIGROSO: almacenamiento en texto planodata class User(val password: String)

// SEGURO: hashing con salimport org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder

val encoder = BCryptPasswordEncoder()val hashedPassword = encoder.encode(plainPassword)


3. Falta de validación de entrada (Input Validation)

Cualquier dato del usuario debe pasar validación. Ignorar esta regla lleva a XSS, inyecciones y ataques DoS.



// PELIGROSO: salida directa sin escapefun renderHtml(userInput: String): String {    return "<div>$userInput</div>"}

// SEGURO: escape HTMLimport org.owasp.encoder.Encode

fun renderSafeHtml(userInput: String): String { return "<div>${Encode.forHtml(userInput)}</div>"}


4. Vulnerabilidades en serialización de datos

Kotlin usa kotlinx.serialization o Gson/Moshi. Una configuración incorrecta puede provocar la exposición de datos sensibles o ejecución remota de código.



// PELIGROSO: serialización de todos los campos@Serializabledata class User(    val name: String,    val passwordHash: String // ¡fuga del hash!)

// SEGURO: exclusión de campos sensibles@Serializabledata class SafeUser( val name: String, @Transient val passwordHash: String = "")


5. Uso inseguro de WebView (Android)

Al desarrollar aplicaciones Android en Kotlin, a menudo se usa WebView. Si no se desactiva JavaScript o no se configura el filtrado, es posible un ataque XSS.



// PELIGROSO: JavaScript habilitado sin filtradowebView.settings.javaScriptEnabled = truewebView.loadUrl("file:///android_asset/index.html")

// SEGURO: desactivamos JavaScript para contenido estáticowebView.settings.javaScriptEnabled = false// O usamos Content Security PolicywebView.loadDataWithBaseURL(null, content, "text/html", "UTF-8", null)


6. Gestión incorrecta de sesiones

Almacenar tokens de autenticación en SharedPreferences sin cifrado es un error común. Usa EncryptedSharedPreferences o Android Keystore.



// PELIGROSO: almacenamiento abierto del tokenval prefs = context.getSharedPreferences("auth", Context.MODE_PRIVATE)prefs.edit().putString("token", token).apply()

// SEGURO: almacenamiento cifradoval encryptedPrefs = EncryptedSharedPreferences.create( "secure_prefs", MasterKey.DEFAULT_MASTER_KEY_ALIAS, contex

Blogs

Book Recommendations