So sichern Sie eine iOS-App

Sicherheit ist ein Schlüsselaspekt der Softwareentwicklung. Nahezu jede mobile Anwendung beschäftigt sich mit Benutzerinformationen oder kommuniziert mit einem Remote-Server. Obwohl sich die Sicherheit in den letzten Jahrzehnten dramatisch verbessert hat, ist sie nach wie vor ein heiß diskutiertes Thema.

In diesem Artikel möchte ich eine Reihe von Themen hervorheben, die sich auf Sicherheit und mobile Entwicklung beziehen. Auf dem Weg bin ich auf eine Reihe von bewährten Vorgehensweisen und Vorschlägen eingegangen, die Sie für die Sicherung Ihrer Anwendungen als nützlich erachten könnten.

Sicherheit und Privatsphäre

Sicherheit ist relativ. Sicherheits-Exploits werden regelmäßig entdeckt und gepatcht. Nichts ist perfekt. Allerdings gibt es eine Reihe von Möglichkeiten, um die Sicherheit Ihrer mobilen Anwendungen zu verbessern. Ein Einbrecher ist weniger versucht, in ein von einem elektrischen Zaun umgebenes Gebäude einzubrechen, als eines, das es nicht ist.

Einige Entwickler übersehen die Tatsache, dass die Benutzer ihrer Anwendungen ihnen ihre Informationen anvertrauen. Als Entwickler sind Sie dafür verantwortlich, diese Informationen sicher zu halten. Es ist egal, was diese Informationen sind. Während die Informationen für Sie unwichtig erscheinen, ist dies für den Benutzer wichtig.

Apple nimmt Sicherheit und Datenschutz sehr ernst. HealthKit ist ein schönes Beispiel für das Engagement von Apple, die Privatsphäre des Benutzers zu schützen. Der Benutzer entscheidet, auf welche Integritätsdaten eine Anwendung Zugriff hat. Während die Anwendung Zugriff auf die Gesundheitsdaten des Benutzers anfordern kann, teilt HealthKit dem nicht mit, auf welche Daten er Zugriff hat. Mit anderen Worten, Apple betrachtet den Autorisierungsstatus einer Anwendung als vertrauliche Information, über die sie keine Kenntnis haben sollte.

1. Speichern von Daten

Sollte Ihre Anwendung Daten speichern

Bevor Sie entscheiden, wie oder wo bestimmte Daten gespeichert werden sollen, müssen Sie sich fragen, ob Sie diese Daten überhaupt speichern sollten. Ist es beispielsweise möglich, die Daten im Speicher zu behalten, anstatt sie auf die Festplatte zu schreiben oder an einen Remote-Server zu senden? Dies kann die Architektur Ihrer Anwendung erheblich vereinfachen und die Sicherheit verbessern.

Wo sollten Sie Daten speichern?

Wenn Sie entscheiden, dass das lokale Speichern der Daten Ihre einzige Option ist, müssen Sie entscheiden, wo Sie diese Daten speichern möchten. Für vertrauliche Informationen wie Anmeldeinformationen ist der Schlüsselbund die beste Option. Dies ist nur für kleine Datenmengen möglich, auf die Ihre Anwendung nicht häufig zugreifen muss.

Müssen die Daten auf iCloud oder iTunes gesichert werden? Wenn dies nicht der Fall ist, sollten Sie die Daten in der Datenbank speichern Caches Verzeichnis der Sandbox der Anwendung. Dieses Verzeichnis wird nicht in iCloud und iTunes gesichert. Warum ist das wichtig? Daten, die nicht vorhanden sind, können nicht gefährdet werden.

Schlüsselbund

Das Standardsystem, auf das Sie über das zugreifen können NSUserDefaults Klasse ist eine schnelle und bequeme Möglichkeit, Datenblöcke zu speichern. Leider wird das Standardsystem von Entwicklern oft überlastet. Es kommt zu oft vor, dass vertrauliche Informationen wie Anmeldeinformationen und Zugriffstoken im Standardsystem gespeichert werden.

Ein viel besserer Ort zum Speichern kleiner Teile sensibler Informationen ist der Schlüsselbund des Systems. Wie der Name schon sagt, wurde es unter dem Gesichtspunkt der Sicherheit entworfen und existiert schon seit vielen Jahren. Obwohl der Schlüsselbund standardmäßig vom Betriebssystem verwaltet wird, haben andere Anwendungen keinen Zugriff auf die Elemente, die Ihre Anwendung im Schlüsselbund speichert.

Es stimmt, dass die Schnittstelle für den Zugriff auf die Schlüsselbunddienste archaisch ist. Glücklicherweise gibt es mehrere ausgezeichnete Bibliotheken, die diese Hürde überwinden. Bei Lockbox handelt es sich beispielsweise um eine einfache Bibliothek für die Interaktion mit den Keychain-Services des Systems. Die Benutzeroberfläche von Lockbox ist einfach zu bedienen und zu verstehen.

Schlüssel, Token, Anmeldeinformationen

Es ist verlockend, Schlüssel, Token und sogar Anmeldeinformationen an leicht zugänglichen Orten wie dem Ziel zu speichern Info.plist oder eine JSON-Datei im Bundle Ihrer Anwendung. Die Wahrheit ist, es ist ein Kinderspiel, diese Informationen aus einer aus dem App Store heruntergeladenen Anwendung zu extrahieren. Speichern Sie ein API-Token für einen Webdienst in Ihrer Anwendung Info.plist, Andere Entwickler können es finden und verwenden.

2. Vernetzung

App Transport-Sicherheit

Sicherheit und Datenschutz stehen seit vielen Jahren auf der Agenda von Apple. Zusammen mit anderen wichtigen Akteuren hat sich Apple entschieden, mit gutem Beispiel voranzugehen. Während der letztjährigen WWDC wurde das Unternehmen eingeführt App Transport-Sicherheit.

Mit App Transport Security möchte Apple die Sicherheit seiner Plattformen und der darauf laufenden Anwendungen verbessern. Egal, wie viel Apple in die Sicherung seiner Betriebssysteme investiert, ein System ist nur so sicher wie seine schwächste Komponente und dazu gehören auch Anwendungen von Drittanbietern.

App Transport Security erzwingt, dass Anwendungen Netzwerkanforderungen über eine sichere Verbindung senden. Wenn App Transport Security für eine Anwendung aktiviert ist, werden Netzwerkanforderungen standardmäßig über HTTPS gesendet. Apple betont sein Engagement für Sicherheit und Datenschutz, indem App Transport Security für mit Xcode 7 erstellte Anwendungen automatisch aktiviert wird.

Weitere Informationen zu App Transport Security finden Sie unter Envato Tuts +. App Transport Security kann zwar leicht deaktiviert werden. Beachten Sie jedoch, dass eines der Ziele von App Transport Security darin besteht, dass Entwickler das Netzwerkverhalten ihrer Anwendungen berücksichtigen.

Mit wem spreche ich

Praktisch jede mobile Anwendung nutzt das Netzwerk. Dies bedeutet, dass Menschen mit schlechten Absichten sich stark auf diesen Aspekt der Anwendungssicherheit konzentrieren. Vernetzung ist eine komplexe Angelegenheit, und Anwendungen basieren auf einer Vielzahl von Technologien, um die Daten abzurufen, an denen sie interessiert sind.

Als Entwickler ist es wichtig, dass Sie sich an eine Reihe von Best Practices halten. Wir haben bereits App Transport Security und die Regeln diskutiert, die von dieser neuen Technologie durchgesetzt werden. Es hört aber nicht auf. Möglicherweise möchten Sie auch weiterführende Themen wie das Festlegen von Zertifikaten untersuchen, um sicherzustellen, dass der Server, mit dem Ihre Anwendung kommuniziert, nicht betrügerisch ist. Moderne Bibliotheken wie Alamofire machen dies viel einfacher.

3. Sensible Informationen

Benutzerdaten

Die meisten Anwendungen verwenden oder speichern vertrauliche Benutzerinformationen. Mobile Geräte haben Zugriff auf eine Vielzahl von Benutzerinformationen, die häufig persönlicher und vertraulicher Art sind, wie z. B. Standort, Adressbuch und Gesundheitsinformationen.

Wie ich bereits in diesem Artikel erwähnt habe, ist die erste Frage, die Sie sich stellen müssen, ob Sie auf diese Informationen zugreifen müssen und, was noch wichtiger ist, ob Sie diese Informationen speichern müssen.

Wenn Sie über ein natives Framework wie HealthKit auf die Informationen zugreifen können, die Sie benötigen, müssen Sie diese Informationen nicht duplizieren und speichern. Beispielsweise lehnt Apple Anwendungen ab, die die Gesundheitsinformationen des Benutzers in iCloud speichern.

Behalten Sie es lokal

Angenommen, Sie müssen einige vertrauliche Informationen speichern, und überlegen Sie, ob diese Informationen lokal bleiben sollen. Ist es notwendig, vertrauliche Informationen an einen Remote-Server zu senden?

Beim Speichern vertraulicher Informationen wird eine Warnung angezeigt. Wenn der Server, auf dem Sie vertrauliche Informationen speichern, gefährdet ist, können Sie dafür verantwortlich gemacht werden, dass diese Informationen an Dritte weitergegeben werden.

Referenzen

Die Online-Sicherheit hat sich in den letzten Jahrzehnten enorm weiterentwickelt. Authentifizierungsprotokolle wie OAuth haben die Kommunikation mit Webdiensten sicherer und transparenter gemacht.

Wenn Ihre Anwendung mit einem sicheren Server kommunizieren muss, überlegen Sie, wie Ihre Anwendung die Anmeldeinformationen verwaltet. Behalten sie sie im Speicher oder speichern sie auf der Festplatte? Wenn Sie den Benutzernamen und das Kennwort des Benutzers fragen, um ein Zugriffstoken abzurufen, können Sie das Zugriffstoken speichern. Aber sollten Sie auch Benutzername und Passwort speichern? Die Antwort ist in den meisten Situationen nein.

Für Anwendungen, die sehr sensible Daten enthalten, z. B. Integritäts- oder Finanzinformationen, ist es möglicherweise sogar besser, das Zugriffstoken im Speicher zu belassen und nicht auf der Festplatte. Wenn Sie es im Speicher behalten, ist es wesentlich sicherer, und Ihre Anwendung wird weniger anfällig. Die Chancen stehen gut, dass das Zugriffstoken ohnehin eine kurze Lebensdauer hat.

Fazit

Die Sicherheit einer Anwendung ist ein grundlegender Aspekt der Softwareentwicklung. Überlegen Sie, auf welche Daten Ihre Anwendung Zugriff hat und ob sie diese Informationen speichern soll. Wenn Sie sich für die Speicherung vertraulicher Informationen entscheiden, beachten Sie die oben genannten Tipps und bewährten Vorgehensweisen. Stellen Sie sicher, dass Sie die Informationen des Benutzers mit Respekt behandeln. Auch wenn die Informationen für Sie unwichtig erscheinen, ist dies für den Benutzer wichtig.