Boas práticas e padrões · Segurança no código · 5 min de leitura
Segredos e chaves: o que nunca vai para o código
Senhas, tokens e chaves de API no repositório ou dentro do app acabam vazando. Guarde no servidor ou num cofre, e no celular use o Keystore (Android) e o Keychain (iOS).
Arraste para o lado para ver o diagrama inteiro.
O que não fazer
- Chave no código-fonte ou em arquivo commitado — o histórico do Git guarda para sempre, mesmo depois de apagar.
- Chave secreta dentro do app (BuildConfig, Info.plist, bundle JS): qualquer pessoa descompila e copia.
- Segredo em log, em mensagem de erro ou na URL (fica em histórico e proxies).
O que fazer
- Servidor: variáveis de ambiente ou um cofre (secret manager do provedor, Vault); rotação periódica; uma chave por ambiente.
- App: só chaves feitas para serem públicas (com restrição por pacote, domínio ou assinatura). Para o resto, o app chama o seu backend.
- Dados sensíveis no aparelho (tokens de sessão): Android Keystore / EncryptedFile; iOS Keychain. Nunca em SharedPreferences ou UserDefaults sem criptografia.
- Detecção: scanner de segredos no CI e no pre-commit; se vazou, revogue e gere outra — apagar o commit não basta.
No código: antes e depois
object Config {
const val PAGAMENTO_SECRET = "sk_live_51H..." // vai dentro do APK
}
suspend fun cobrar(valor: Long) = http.post("https://api.pagamentos.com/cobrancas") {
header("Authorization", "Bearer ${Config.PAGAMENTO_SECRET}")
setBody(mapOf("valor" to valor))
} // App: chama o próprio backend com o token da sessão do usuário (guardado no Keystore)
suspend fun cobrar(pedidoId: String) = http.post("https://api.meusite.com/pedidos/$pedidoId/cobrar") {
header("Authorization", "Bearer ${sessao.tokenAtual()}")
}
// Backend (Ktor): a chave secreta vem do ambiente, nunca do código
val pagamentoSecret = System.getenv("PAGAMENTO_SECRET") ?: error("PAGAMENTO_SECRET não definido") O app não conhece a chave do provedor; o backend confere quem é o usuário e qual o valor antes de cobrar.
Em resumo
- O que vai no app pode ser extraído.
- Segredos no servidor, num cofre.
- Tokens no Keystore / Keychain.
- Vazou? Revogue e gere outra.
Perguntar à IA
Monte um prompt pronto sobre Segredos e chaves: o que nunca vai para o código na sua linguagem e no seu caso, e abra num chat gratuito.
O prompt vai para o site que você escolher. Não cole senhas, tokens nem dados reais de clientes. Para Gemini e outros, copie e cole.