Segurança de aplicações Kotlin: top 10 vulnerabilidades para iniciantes

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Segurança de aplicações Kotlin: top-10 vulnerabilidades para iniciantes



Kotlin é uma linguagem de programação moderna, ativamente utilizada para criar aplicações Android, soluções de servidor e projetos multiplataforma. No entanto, mesmo com sua tipagem estrita e segurança por padrão, desenvolvedores iniciantes frequentemente cometem erros que podem levar a vulnerabilidades graves. Neste artigo, vamos analisar o top-10 dos problemas de segurança mais comuns em aplicações Kotlin, mostrar exemplos de código perigoso e dar recomendações para corrigi-los.



1. SQL Injection

Uma das vulnerabilidades mais antigas e perigosas. Se você concatenar diretamente a entrada do usuário em uma consulta SQL, um invasor pode executar comandos arbitrários.



// PERIGOSO: concatenação de stringsval 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. Armazenamento inseguro de senhas

Nunca armazene senhas em texto simples. Use bcrypt, Argon2 ou PBKDF2. Em Kotlin, você pode usar a biblioteca spring-security-crypto ou kotlinx-serialization com hashing.



// PERIGOSO: armazenamento em plain textdata class User(val password: String)

// SEGURO: hashing com saltimport org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder

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


3. Falta de validação de entrada (Input Validation)

Quaisquer dados do usuário devem passar por validação. Ignorar esta regra leva a XSS, injeções e ataques DoS.



// PERIGOSO: saída direta sem 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 na serialização de dados

Kotlin usa kotlinx.serialization ou Gson/Moshi. Uma configuração incorreta pode levar à exposição de dados sensíveis ou execução remota de código.



// PERIGOSO: serialização de todos os campos@Serializabledata class User(    val name: String,    val passwordHash: String // vazamento de hash!)

// SEGURO: exclusão de campos sensíveis@Serializabledata class SafeUser( val name: String, @Transient val passwordHash: String = "")


5. Uso inseguro de WebView (Android)

Ao desenvolver aplicações Android em Kotlin, WebView é frequentemente usado. Se você não desabilitar JavaScript ou não configurar a filtragem, um ataque XSS é possível.



// PERIGOSO: JavaScript ativado sem filtragemwebView.settings.javaScriptEnabled = truewebView.loadUrl("file:///android_asset/index.html")

// SEGURO: desabilitar JavaScript para conteúdo estáticowebView.settings.javaScriptEnabled = false// Ou usar Content Security PolicywebView.loadDataWithBaseURL(null, content, "text/html", "UTF-8", null)


6. Gerenciamento incorreto de sessões

Armazenar tokens de autenticação em SharedPreferences sem criptografia é um erro comum. Use EncryptedSharedPreferences ou Android Keystore.



// PERIGOSO: armazenamento aberto do tokenval prefs = context.getSharedPreferences("auth", Context.MODE_PRIVATE)prefs.edit().putString("token", token).apply()

// SEGURO: armazenamento criptografadoval encryptedPrefs = EncryptedSharedPreferences.create( "secure_prefs", MasterKey.DEFAULT_MASTER_KEY_ALIAS, contex

Blogs

Book Recommendations