Segurança de aplicativos Swift: 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 Swift: top 10 vulnerabilidades para iniciantes

O desenvolvimento de aplicações móveis e desktop em Swift requer não apenas conhecimento de sintaxe e frameworks, mas também compreensão dos fundamentos de cibersegurança. Mesmo um pequeno erro no código pode levar ao vazamento de dados do usuário ou ao comprometimento do dispositivo. Neste artigo, analisaremos as 10 vulnerabilidades mais comuns em aplicações Swift que desenvolvedores iniciantes enfrentam e mostraremos como evitá-las.



1. Armazenamento de dados inseguro (Insecure Data Storage)

Um dos erros mais frequentes é salvar informações confidenciais (senhas, tokens, chaves de API) em UserDefaults ou em arquivos de texto simples. Esses dados podem ser facilmente extraídos em um dispositivo com jailbreak.

// Incorreto: armazenar senha em UserDefaultsUserDefaults.standard.set("mySecretPassword", forKey: "userPassword")

// Correto: usar Keychainimport Securitylet password = "mySecretPassword"let keychainItem = [ kSecClass: kSecClassGenericPassword, kSecAttrAccount: "userPassword", kSecValueData: password.data(using: .utf8)!] as CFDictionarySecItemAdd(keychainItem, nil)


2. Injeções via SQLite e Core Data

Usar strings não tratadas em consultas ao banco de dados abre caminho para injeções de SQL. Mesmo que você use Core Data, predicados inseguros podem ser atacados.

// Incorreto: substituição diretalet username = "admin' OR '1'='1"let query = "SELECT * FROM users WHERE name = '\\(username)'"

// Correto: usar consultas parametrizadas (FMDB)let query = "SELECT * FROM users WHERE name = ?"db.executeQuery(query, withArgumentsIn: [username])


3. Ausência de HTTPS e SSL Pinning

Usar HTTP em vez de HTTPS torna a aplicação vulnerável a ataques "man-in-the-middle" (MITM). Mesmo com HTTPS, é recomendado usar SSL Pinning para proteção adicional.

// Configuração de HTTPS em Info.plist// <key>NSAppTransportSecurity</key>// <dict>//     <key>NSAllowsArbitraryLoads</key>//     <false/>// </dict>

// Implementação de SSL Pinning com URLSessionlet pinnedKeys = ["yourPublicKeyHash"]let delegate = URLSessionPinningDelegate(pinnedKeys: pinnedKeys)let session = URLSession(configuration: .default, delegate: delegate, delegateQueue: nil)


4. Algoritmos de criptografia fracos

Usar algoritmos de criptografia obsoletos (MD5, SHA1) ou funções criptográficas caseiras torna os dados vulneráveis. Sempre use bibliotecas modernas.

// Incorreto: MD5let hash = MD5(string: "password")

// Correto: usar CommonCrypto com SHA256import CommonCryptofunc sha256(_ data: Data) -> Data { var hash = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH)) data.withUnsafeBytes { _ = CC_SHA256($0.baseAddress, CC_LONG(data.count), &hash) } return Data(hash)}


5. Validação de entrada insuficiente (Input Validation)

A ausência de validação da entrada do usuário pode levar a ataques XSS (em WebView) ou corrupção de dados. Verifique todos os dados de entrada quanto a comprimento, formato e conteúdo.

// Incorreto: confiar na entradalet userInput = textField.textwebView.loadHTMLString(userInput!, baseURL: nil)

// Correto: sanitização da entradafunc sanitizeInput(_ input: String) -> String { return input .replacingOccurrences(of: "&", with: "&") .replacingOccurrences(of: "<", with: "<") .replacingOccurrences(of: ">", with: ">")}


6. Vazamento de dados através de logs e depuração

print() ou NSLog deixados em produção podem expor dados confidenciais. Use compilação condicional para mensagens de depuração.

// Incorreto: registrar logs em produção

Blogs

Book Recommendations