Absicherung einer Android-Anwendung
Es sollte nicht überraschen, dass die Sicherheit bei der Entwicklung von Software ein wichtiger Aspekt ist. Neben den Sicherheitsmaßnahmen des Android-Betriebssystems ist es wichtig, dass Entwickler besonders darauf achten, dass ihre Anwendungen die festgelegten Sicherheitsstandards erfüllen.
In diesem Abschnitt werden einige wichtige Sicherheitsaspekte und bewährte Verfahren zum besseren Verständnis aufgeschlüsselt. Wenn Sie diese bewährten Verfahren befolgen, sind Ihre Anwendungen weniger anfällig für bösartige Programme, die auf einem Client-Gerät installiert sein könnten.
Datenspeicherung
Der Schutz der von einer Anwendung auf einem Gerät gespeicherten Daten ist das häufigste Sicherheitsproblem bei der Entwicklung einer Android-Anwendung. Einige einfache Regeln können befolgt werden, um die Sicherheit Ihrer Anwendungsdaten zu erhöhen.
Sichern Ihrer Daten bei Verwendung des internen Speichers
Wie wir im vorherigen Kapitel gesehen haben, ist der interne Speicher eine gute Möglichkeit, private Daten auf einem Gerät zu speichern. Jede Android-Anwendung verfügt über ein entsprechendes internes Speicherverzeichnis, in dem private Dateien erstellt und gespeichert werden können. Diese Dateien sind nur für die erstellende Anwendung bestimmt und können daher von anderen Anwendungen auf dem Client-Gerät nicht eingesehen werden. Als Faustregel gilt: Wenn Daten nur für Ihre Anwendung zugänglich sein sollen und es möglich ist, sie im internen Speicher abzulegen, sollten Sie dies tun. Zur Auffrischung der Kenntnisse über die Verwendung des internen Speichers lesen Sie bitte das vorherige Kapitel.
Sicherung Ihrer Daten bei Verwendung eines externen Speichers
Externe Speicherdateien sind nicht für Anwendungen geschützt und können daher leicht von anderen Anwendungen auf demselben Client-Gerät eingesehen werden. Aus diesem Grund sollten Sie in Erwägung ziehen, Anwendungsdaten zu verschlüsseln, bevor Sie sie im externen Speicher ablegen. Es gibt eine Reihe von Bibliotheken und Paketen, die verwendet werden können, um Daten vor dem Speichern auf einem externen Speicher zu verschlüsseln. Die Conceal-Bibliothek von Facebook (http://facebook.github.io/conceal/) ist eine gute Option für die Verschlüsselung von Daten auf externen Speichern.
Darüber hinaus gilt als weitere Faustregel: Speichern Sie keine sensiblen Daten auf externen Speichern. Der Grund dafür ist, dass externe Speicherdateien frei manipuliert werden können. Auch die aus dem externen Speicher abgerufenen Eingaben sollten einer Validierung unterzogen werden. Diese Validierung sollte aufgrund der Unzuverlässigkeit der in externen Speichern gespeicherten Daten durchgeführt werden.
Sicherung Ihrer Daten bei Verwendung eines internen Speichers.
Inhaltsanbieter können den externen Zugriff auf Ihre Anwendungsdaten entweder verhindern oder ermöglichen. Verwenden Sie das android:exported-Attribut bei der Registrierung Ihres Inhaltsanbieters in der Manifestdatei, um anzugeben, ob der externe Zugriff auf den Inhaltsanbieter erlaubt werden soll. Setzen Sie android:exported auf true, wenn Sie möchten, dass der Content Provider exportiert wird, andernfalls setzen Sie das Attribut auf false.
Darüber hinaus sollten die Abfragemethoden des Inhaltsanbieters – z. B. query(), update() und delete() – verwendet werden, um SQL-Injection zu verhindern (eine Code-Injection-Technik, bei der ein Angreifer bösartige SQL-Anweisungen in einem Eingabefeld ausführt).
Netzwerksicherheit Best Practices für Ihre Android App Entwicklung
Es gibt eine Reihe von Best Practices, die bei der Durchführung von Netzwerktransaktionen über eine Android-Anwendung befolgt werden sollten. Diese bewährten Praktiken können in verschiedene Kategorien unterteilt werden. In diesem Abschnitt werden wir über bewährte Praktiken für Internetprotokoll- (IP) und Telefonie-Netzwerke sprechen.
IP-Vernetzung
Bei der Kommunikation mit einem entfernten Computer über IP ist es wichtig sicherzustellen, dass Ihre Anwendung HTTPs verwendet, wo immer dies möglich ist (d. h. wo immer es vom Server unterstützt wird). Ein wichtiger Grund dafür ist, dass sich Geräte oft mit unsicheren Netzwerken verbinden, z. B. mit öffentlichen drahtlosen Verbindungen. HTTPs gewährleistet eine verschlüsselte Kommunikation zwischen Clients und Servern, unabhängig davon, mit welchem Netz sie verbunden sind. In Java kann eine HttpsURLConnection für die sichere Datenübertragung über ein Netzwerk verwendet werden. Es ist wichtig zu beachten, dass Daten, die über eine unsichere Netzwerkverbindung empfangen werden, nicht vertrauenswürdig sind.
Telefonie-Netzwerke
In Fällen, in denen Daten frei zwischen einem Server und Client-Anwendungen übertragen werden müssen, sollte Firebase Cloud Messaging (FCM) – zusammen mit IP-Netzwerken – anstelle anderer Mittel, wie dem SMS-Protokoll (Short Messaging Service), verwendet werden. FCM ist eine plattformübergreifende Messaging-Lösung, die die nahtlose und zuverlässige Übertragung von Nachrichten zwischen Anwendungen ermöglicht.
Absicherung von Broadcast-Empfängern
Standardmäßig wird eine Broadcast-Receiver-Komponente exportiert und kann daher von anderen Anwendungen auf demselben Gerät aufgerufen werden. Sie können den Zugriff von Anwendungen auf den Broadcast-Empfänger Ihrer Anwendungen kontrollieren, indem Sie Sicherheitsberechtigungen auf ihn anwenden. Berechtigungen können für Broadcast-Empfänger in der Manifestdatei einer Anwendung mit dem Element festgelegt werden.
Absicherung Ihres dynamisch ladenden Codes
In Szenarien, in denen das dynamische Laden von Code durch Ihre Anwendung erforderlich ist, müssen Sie sicherstellen, dass der geladene Code aus einer vertrauenswürdigen Quelle stammt. Darüber hinaus müssen Sie sicherstellen, dass das Risiko der Manipulation von Code um jeden Preis reduziert wird. Das Laden und Ausführen von manipuliertem Code stellt eine große Sicherheitsbedrohung dar. Wenn der Code von einem entfernten Server geladen wird, stellen Sie sicher, dass er über ein sicheres, verschlüsseltes Netzwerk übertragen wird. Denken Sie daran, dass Code, der dynamisch geladen wird, mit denselben Sicherheitsberechtigungen wie Ihre Anwendung ausgeführt wird (die Berechtigungen, die Sie in der Manifestdatei Ihrer Anwendung definiert haben).
Absicherung von Diensten
Im Gegensatz zu Broadcast-Empfängern werden Dienste nicht standardmäßig vom Android-System exportiert. Die Standard-Exportierung eines Dienstes erfolgt nur, wenn ein Absichtsfilter zur Deklaration eines Dienstes in der Manifestdatei hinzugefügt wird. Das android:exported-Attribut sollte verwendet werden, um sicherzustellen, dass Dienste nur dann exportiert werden, wenn Sie dies wünschen. Setzen Sie android:exported auf true, wenn ein Dienst exportiert werden soll, und andernfalls auf false.
Bereitstellen Ihrer Android-Anwendung
Bislang haben wir einen ausführlichen Blick auf das Android-System, die Anwendungsentwicklung unter Android und einige andere wichtige Themen wie die Sicherheit von Android-Anwendungen geworfen. Nun ist es an der Zeit, das letzte Thema dieses Artikels zu behandeln, das das Android-Ökosystem betrifft: das Starten und Veröffentlichen einer Android-Anwendung.
Vielleicht fragen Sie sich an dieser Stelle, was die Worte „starten“ und „veröffentlichen“ bedeuten. Eine Markteinführung ist eine Aktivität, bei der ein neues Produkt der Öffentlichkeit (den Endbenutzern) vorgestellt wird. Die Veröffentlichung einer Android-Anwendung ist einfach der Vorgang, bei dem eine Android-Anwendung den Benutzern zur Verfügung gestellt wird. Für den erfolgreichen Start einer Android-Anwendung müssen verschiedene Aktivitäten und Prozesse durchgeführt werden.