2015-10-01 4 views
6

Ich habe eine Xamarin.Forms App, die eine lokale SqLite-Datenbank als Datenquelle verwendet. Da die Daten proprietär sind, möchte ich sie schützen. Wenn jemand Zugriff auf die Datenbankdatei erhält, muss er sie entschlüsseln, um auf die Daten zugreifen zu können.Schutz lokaler proprietärer Daten in einer Xamarin App

Ich möchte auch die Anzahl der Abfragen beschränken, die Benutzer gegen die Datenbank stellen können, so dass sie zu einem bestimmten Zeitpunkt die Möglichkeit erwerben müssen, mehr Daten zu verwenden (In-App-Kauf).

Ich möchte vermeiden, dass Netzwerkanrufe so oft wie möglich ausgeführt werden, um die Auswirkungen auf den Datentarif des Benutzers zu minimieren und die App unter Bedingungen mit schlechter oder fehlender Konnektivität gut funktionieren zu lassen. Also möchte ich die Daten in einer lokalen Datenbank (vielleicht in SqLite) gespeichert.

Ich bin gespannt, wie verschiedene Leute dieses Problem angehen würden, um die Daten zu schützen und gleichzeitig die Netzwerkauslastung zu minimieren.

Hier ist eine Art, was ich dachte (wenn es möglich ist):

1) Lassen Sie den Benutzer download/die App installieren.

2) Beim ersten Laden lädt die App einen Schlüssel basierend auf der Geräte-ID und den aktuellen Kaufinformationen des Benutzers hoch. Dann wird eine SqLite-Datenbankdatei heruntergeladen, die mit dem hochgeladenen Schlüssel verschlüsselt wurde.

3) Wenn der Benutzer das Limit der Abfragen erreicht, wird die Datenbankdatei gelöscht. Wenn sie mehr Daten kaufen, wird ein neuer Schlüssel hochgeladen und eine neue verschlüsselte Datenbank wird heruntergeladen, um verwendet zu werden.

Gedanken? Gibt es einen besseren Weg?

+0

schöne Frage, lassen Sie uns sehen, was andere sagen wird, wenn die Datenbank lokal gespeichert ist, die Abfragen oder Löschen der Datenbank zu begrenzen hilft nicht viel denke ich, kann der Benutzer einen Weg, um Zugang finden die Datenbank, ohne die App zu öffnen, aber die ganze Datenbank zu entschlüsseln sollte reichen – CDrosos

Antwort

0

Wie CLB erwähnt, SQLCipher ist Open Source. Wenn Sie also nicht für die Komponente bezahlen möchten, können Sie die Quelle selbst herunterladen und erstellen und dann für die Verwendung in Xamarin umschließen. Dies ist zugegebenermaßen eine technisch anspruchsvolle Aufgabe.

Wenn das nicht möglich ist, würde ich zwei weitere Optionen empfehlen:

  1. neu zu bewerten Ihre Notwendigkeit Daten lokal zu speichern. Es ist äußerst unwahrscheinlich, dass Sie so viele Daten übertragen müssen, dass der Datentarif eines Benutzers einen Blip verursacht. Und zwischen Mobilfunk und WLAN ist es nicht mehr so ​​üblich, dass Benutzer ohne Verbindung sind. Es passiert sicherlich, und es gibt bestimmte Apps, wo dies sehr wichtig ist, aber Sie müssen möglicherweise Zugeständnisse machen, wenn die Daten so empfindlich sind.

  2. Wenn Sie die Daten unbedingt lokal speichern müssen und SQLCipher nicht verwenden können, besteht Ihre letzte echte Option darin, eine Verschlüsselungsbibliothek zu verwenden und die Daten selbst anstelle der Datenbankdatei zu verschlüsseln. Dies ist normalerweise aus verschiedenen Gründen weniger als ideal, aber es könnte Ihr letzter Ausweg sein. PCL Crypt ist eine PCL-fähige Krypto-Bibliothek, die Sie sich ansehen können.

https://github.com/aarnott/pclcrypto

1

Ich würde SQLCipher empfehlen! Es ist eine Komponente innerhalb Xamarin (http://components.xamarin.com/view/sqlcipher-for-xamarin-ios), kann aber auch von der Quelle aufgebaut werden, wie es Open Source (https://www.zetetic.net/sqlcipher/open-source/)

, dass Ihre Datenbank wird völlig sicher ist :)

+0

Die Xamarin-Komponenten sind nett, aber bei 499 $ pro Plattform, das ist ein hoher Preis. Gibt es eine kostenlose oder günstigere Option für Android, iOS und Windows Phone? –

Verwandte Themen