Sicherheit von Swift-Apps: Top-10 Schwachstellen für Einsteiger

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Sicherheit von Swift-Apps: Top-10 Schwachstellen für Anfänger

Die Entwicklung mobiler und Desktop-Anwendungen mit Swift erfordert nicht nur Kenntnisse der Syntax und Frameworks, sondern auch ein Verständnis der Grundlagen der Cybersicherheit. Selbst ein kleiner Fehler im Code kann zu einem Datenleck oder einer Kompromittierung des Geräts führen. In diesem Artikel analysieren wir die Top-10 der häufigsten Schwachstellen von Swift-Apps, auf die Anfänger stoßen, und zeigen, wie man sie vermeidet.



1. Ungeschützte Datenspeicherung (Insecure Data Storage)

Einer der häufigsten Fehler ist das Speichern vertraulicher Informationen (Passwörter, Tokens, API-Schlüssel) in UserDefaults oder in einfachen Textdateien. Diese Daten können auf einem jailbroken Gerät leicht extrahiert werden.

// Falsch: Passwort in UserDefaults speichernUserDefaults.standard.set("mySecretPassword", forKey: "userPassword")

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


2. Injection-Angriffe über SQLite und Core Data

Die Verwendung von unverarbeiteten Zeichenketten in Datenbankabfragen öffnet den Weg für SQL-Injection. Selbst wenn Sie Core Data verwenden, können unsichere Prädikate angegriffen werden.

// Falsch: direkte Substitutionlet username = "admin' OR '1'='1"let query = "SELECT * FROM users WHERE name = '\\(username)'"

// Richtig: Verwendung parametrisierter Abfragen (FMDB)let query = "SELECT * FROM users WHERE name = ?"db.executeQuery(query, withArgumentsIn: [username])


3. Fehlendes HTTPS und SSL Pinning

Die Verwendung von HTTP anstelle von HTTPS macht die App anfällig für Man-in-the-Middle-Angriffe (MITM). Selbst mit HTTPS wird empfohlen, SSL Pinning für zusätzlichen Schutz zu verwenden.

// HTTPS-Konfiguration in Info.plist// <key>NSAppTransportSecurity</key>// <dict>//     <key>NSAllowsArbitraryLoads</key>//     <false/>// </dict>

// Implementierung von SSL Pinning mit URLSessionlet pinnedKeys = ["yourPublicKeyHash"]let delegate = URLSessionPinningDelegate(pinnedKeys: pinnedKeys)let session = URLSession(configuration: .default, delegate: delegate, delegateQueue: nil)


4. Schwache Verschlüsselungsalgorithmen

Die Verwendung veralteter Verschlüsselungsalgorithmen (MD5, SHA1) oder selbstgebauter kryptografischer Funktionen macht Daten angreifbar. Verwenden Sie stets moderne Bibliotheken.

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

// Richtig: Verwendung von CommonCrypto mit 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. Unzureichende Eingabevalidierung (Input Validation)

Das Fehlen einer Validierung der Benutzereingabe kann zu XSS-Angriffen (in WebView) oder Datenbeschädigung führen. Überprüfen Sie alle Eingabedaten auf Länge, Format und Inhalt.

// Falsch: Vertrauen in die Eingabelet userInput = textField.textwebView.loadHTMLString(userInput!, baseURL: nil)

// Richtig: Eingabebereinigungfunc sanitizeInput(_ input: String) -> String { return input .replacingOccurrences(of: "&", with: "&") .replacingOccurrences(of: "<", with: "<") .replacingOccurrences(of: ">", with: ">")}


6. Datenleck durch Logs und Debugging

In der Produktion verbliebene print()- oder NSLog-Anweisungen können vertrauliche Daten preisgeben. Verwenden Sie bedingte Kompilierung für Debug-Meldungen.

// Falsch: Protokollierung in der Produktion

Blogs

Buchempfehlungen