Sicherheit von Swift-Apps: Die Top-10 Schwachstellen und Schutzmethoden

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-Anwendungen: Top-10 Schwachstellen und Schutzmethoden



Die Entwicklung mit Swift für iOS und macOS erfordert besondere Aufmerksamkeit für die Sicherheit. Selbst ein kleiner Fehler kann zu Datenlecks, Hacking oder der Kompromittierung des Geräts führen. In diesem Artikel analysieren wir die 10 häufigsten Schwachstellen in Swift-Anwendungen, zeigen Beispiele für gefährlichen Code und geben praktische Empfehlungen zu deren Behebung.



1. Unsichere Datenspeicherung (Insecure Data Storage)

Der häufigste Fehler ist das Speichern vertraulicher Daten in UserDefaults oder Plist-Dateien ohne Verschlüsselung.



Problematischer Code:

UserDefaults.standard.set("password123", forKey: "userPassword")UserDefaults.standard.synchronize()


Sichere Lösung: Verwenden Sie Keychain Services oder Data Protection API.



import Security

func savePassword(_ password: String, for account: String) { let data = password.data(using: .utf8)! let query: [String: Any] = [ kSecClass as String: kSecClassGenericPassword, kSecAttrAccount as String: account, kSecValueData as String: data, kSecAttrAccessible as String: kSecAttrAccessibleWhenUnlockedThisDeviceOnly ] SecItemAdd(query as CFDictionary, nil)}


2. Fehlende Eingabevalidierung (Input Validation)

Benutzereingaben enthalten oft schädliche Daten. Überprüfen und bereinigen Sie Eingaben immer.



Beispiel für SQL-Injection:

let query = "SELECT * FROM users WHERE name = '\\(userInput)'" // Gefährlich!


Schutz: Verwenden Sie parametrisierte Abfragen.

let query = "SELECT * FROM users WHERE name = ?"let statement = try database.prepare(query)try statement.bind([userInput])


3. Unsichere Netzwerkkommunikation (Insecure Network Communication)

Verwendung von HTTP anstelle von HTTPS, Ignorieren von SSL-Zertifikaten.



Gefährlicher Code:

let url = URL(string: "http://example.com/api")! // HTTP, nicht HTTPSlet task = URLSession.shared.dataTask(with: url) { data, response, error in    // Datenverarbeitung}


Sicherer Ansatz:

let url = URL(string: "https://example.com/api")!let config = URLSessionConfiguration.defaultconfig.tlsMinimumSupportedProtocolVersion = .TLSv12let session = URLSession(configuration: config)let task = session.dataTask(with: url) { data, response, error in    guard let httpResponse = response as? HTTPURLResponse,          httpResponse.statusCode == 200 else {        return    }    // Datenverarbeitung}task.resume()


4. Code-Injection über WebView (WebView Injection)

Wenn Sie WKWebView ohne Einschränkungen verwenden, kann ein Angreifer JavaScript-Code ausführen.



Verwundbarer Code:

webView.loadHTMLString(htmlContent, baseURL: nil)


Schutz: Deaktivieren Sie JavaScript oder verwenden Sie Content Security Policy.

let config = WKWebViewConfiguration()let preferences = WKPreferences()preferences.javaScriptEnabled = falseconfig.preferences = preferenceslet webView = WKWebView(frame: .zero, configuration: config)


5. Ungeschützte API-Schlüssel und Tokens (Hardcoded Secrets)

Speichern Sie API-Schlüssel, Tokens oder Passwörter niemals im Quellcode.



Falsch:

let apiKey = "sk_live_1234567890abcdef"


Richtig: Verwenden Sie .env-Dateien, Server-Autorisierung oder Cloud-Dienste (z.B. AWS Secrets Manager).



// Verschlüsselter Schlüssel in Info.plistif let apiKey = Bundle.main.object(forInfoDictionaryKey: "API_KEY") as? String {    // Schlüssel verwenden}


6. Unzureichender Schutz vor Reverse

Blogs

Buchempfehlungen