Android Server-Login Daten in der App sicherer hinterlegen?

jackie05

Mitglied
Hallo,
ich habe seit einiger Zeit eine Android-App Programmiert, indem ich auch von meinem Server ein Paar Daten auslese, diese auch Passwort geschützt ist.
Nun ist es oft der Fall, dass das Passwort in meiner Android-App herausgefunden wird.

Das Passwort ist Verschlüsselt in einem C++ Script hinterlegt, und in Android lese ich dieses Passwort aus und übergebe es (entschlüsselt) meinem PHP Script.

Hier sende ich dann die Daten zum Server:
Code:
public void getData(final Activity activity) {
        if (onGetDataListener != null) {
            onGetDataListener.onStart();
        }
        String tag_string_req = "req_get_data";

        StringRequest strReq = new StringRequest(Request.Method.GET,
                "https://test.com/", new Response.Listener<String>() {

            @Override
            public void onResponse(String response) {
                //*************************
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e(TAG, "Registration Error: " + error.getMessage());
                if (onGetDataListener != null) {
                    onGetDataListener.onError(error.getMessage());
                }
            }
        }) {
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                Map<String, String> headers = new HashMap<>();
                String data = MainActivity.getData().split(",")[1]; //Login Daten für den Server
                String auth = "Basic " + Base64.encodeToString(data.getBytes(), Base64.NO_WRAP);
                headers.put("Content-Type", "application/json");
                headers.put("Authorization", auth);
                return headers;
            }
        };

        strReq.setShouldCache(false);
        AppController.getInstance().addToRequestQueue(strReq, tag_string_req);
    }

Mein Problem ist jetzt nur, dass das hier nicht Sicher ist.
Wie könnte ich das Passwort bzw. Login Daten in einer Android-Anwendung Sicher hinterlegen?
Gibt es überhaupt einen Sicheren Weg?

Ich bedanke mich schon mal für die Hilfe.

Gruss
 

AndiE

Top Contributor
Das verstehe ich noch nicht.

Ich würde doch aus der App heraus einen Service aufrufen. Also etvvl. mit der Webseite und dem Port. und dem Servicenamen. Je nachdem. Das wäre dann eine RPC oder heute REST. Was du dann zurückbekommst ist eine XML oder JSON, die du dann weiternutzt. Aber an das passwort für den Datenbankserver dahinter kommst du über die RPC nicht.

Ansonsten würde ich da typsichere Eingaben anfordern, also nicht mit PHP arbeiten, um Eingabe von ";" und damit Eingriffe in den Datenbankserver zu verhindern. Alternativ könnte man die Befuugnisse auch mit "grant" neschränken, statt sich als "superuser" anzumelden.

Ist das das, was gemeint ist? Ich bin mir nach Thallius nicht mehr so sicher.
 

LimDul

Top Contributor
Es gibt keinen sicheren Weg in einer App ein Password, was zur Authenfizierung verwendet wird, zu hinterlegen. Man kann den Aufwands in die Höhe treiben es raus zubekommen, aber verhindern kann man es nicht.

Sprich du musst auf Serverseite grundsätzlich davon ausgehen, dass das Passwort bekannt sind und die Requests manipuliert sein können. Damit greift das, was AndiE sagt. Sorge dafür, dass nur Requests geschickt werden können, die nur das können, was für die App gebraucht wird. Keine generischen Requests & Co.
 

Thallius

Top Contributor
Ansonsten würde ich da typsichere Eingaben anfordern, also nicht mit PHP arbeiten, um Eingabe von ";" und damit Eingriffe in den Datenbankserver zu verhindern. Alternativ könnte man die Befuugnisse auch mit "grant" neschränken, statt sich als "superuser" anzumelden.

Ist das das, was gemeint ist? Ich bin mir nach Thallius nicht mehr so sicher.

Im grossen und ganzen ja richtig was du schreibst aber von PHP scheinst du mal überhaupt keine Ahnung zu haben. SQL injection kann ich mit einem spring backend genau ermöglichen oder verhindern wie mit jeder anderen Programmiersprache. Also auch PHP, Python etc.

Claus
 

jackie05

Mitglied
Vielen Dank für die Antworten.

Es gibt keinen sicheren Weg in einer App ein Password, was zur Authenfizierung verwendet wird, zu hinterlegen. Man kann den Aufwands in die Höhe treiben es raus zubekommen, aber verhindern kann man es nicht.

Sprich du musst auf Serverseite grundsätzlich davon ausgehen, dass das Passwort bekannt sind und die Requests manipuliert sein können. Damit greift das, was AndiE sagt. Sorge dafür, dass nur Requests geschickt werden können, die nur das können, was für die App gebraucht wird. Keine generischen Requests & Co.

Wie könnte ich das jetzt ambesten machen mit den Requests?
Sorry, ich weiss da leider momentan nicht mehr Weiter.

Oder z.B. so:
In meiner App mache ich eine PHP abfrage und bekomme als Rückgabe einen Json.
Diese Json soll nur über meine App erfolgreich ausgelesen werden und nicht einfach so für jeden, im Web Browser oder Sonstiges, einzusehen sein.
Kann man das irgendwie so Autorisieren, das es für andere User schwieriger wird das zu knacken?

Danke schon mal.

Gruss
 

LimDul

Top Contributor
Defakto wirst du es nicht verhindern können, dass jemand deine App dekompiliert und die Schritte nachvollzieht bzw. sich mit einem Proxy dazwischenhängt und den Request mitliest. Du kannst wie gesagt, nur den Aufwand in die Höhe treiben.

Schritt 1: Kommunikation nur über https mit deinem Server - ansonsten reicht ein einfacher Proxy um mitzulesen
Schritt 2: Ordentliches Zertifikat ggf. mit Certificate Pinning in der App - ansonsten reicht ein einfacher SSL-Proxy zum mitlesen
Schritt 3: Die API mit einer Mini-Authentifizierung versehen. Das kann z.B. sein, die App schickt Request A zum Server bekommt ein Token zurück, was z.b. 120 Minuten gültig ist. Mit diesem Token kann die App dann Request B schicken der dein Json zurückbekommt. Damit würde man beim dekompilieren nicht sofort das Passwort für die API sehen. Das ganze kann man noch beliebig komplexer machen, hängt halt immer vom Kosten/Nutzen ab.


Wenn es ein echtes Problem oder Sicherheitsrisiko ist, wenn jemand die JSON-Daten zu sehen bekommt, dann wäre es sinnvoll die gesamte Architektur noch mal zu hinterfragen und sich zu fragen "Braucht die App die Daten überhaupt? Kann man das nicht anders konzipieren, dass die Verarbeitung der Daten auf dem Server stattfindet?". Das ist natürlich ohne die konkreten Anforderungen schwer zu beantworten.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Einfache Rechenoperation über TCP Server Android & Cross-Platform Mobile Apps 15
M App Datenbank Server Android & Cross-Platform Mobile Apps 5
B Android TCP-Verbindung zum Server über welche Prozess auslagerung nutzen? Android & Cross-Platform Mobile Apps 1
N Android Client-Server-Kommunikation: push oder poll? Android & Cross-Platform Mobile Apps 10
K Android Zugriff auf FTP-Server Android & Cross-Platform Mobile Apps 1
M Android Nur erste Zeile wird vom Server empfangen Android & Cross-Platform Mobile Apps 0
M Android Server-Client-Verbindung in Android-App mit Sockets aufbauen Android & Cross-Platform Mobile Apps 5
L Zugriff auf entfernten mySQL-Server via Android Android & Cross-Platform Mobile Apps 4
K Android verbinden mit verschlüsselten Server Android & Cross-Platform Mobile Apps 2
M Inhalt eines Eingabefeldes an einen Server senden? Android & Cross-Platform Mobile Apps 9
T Android KontrollApp für Nitrado Server Android & Cross-Platform Mobile Apps 2
D gpx-Datei von Smartphone auf Server uploaden Android & Cross-Platform Mobile Apps 4
S Android binäre Daten zwischen Android und einem Java-Server Android & Cross-Platform Mobile Apps 5
K BT-Server EOFException abfangen Android & Cross-Platform Mobile Apps 2
M Android Von Smartphone auf Daten von Server zugreifen Android & Cross-Platform Mobile Apps 2
S Android Zugriff auf FTP Server Android & Cross-Platform Mobile Apps 7
N Java ME Server-Client Verbindung über Wifi Android & Cross-Platform Mobile Apps 6
F Server - Client Verbindung mit Java ME Android & Cross-Platform Mobile Apps 3
A "HandyClient-Server-modell" Android & Cross-Platform Mobile Apps 7
D messages via xml zwischen server/clienthandy verschicken Android & Cross-Platform Mobile Apps 5
W Volley onDestroy angemeldet bleiben Fehler... unabhänging vom Login Android & Cross-Platform Mobile Apps 37
W Wie funktioniert das mit den Fingerabdruck Login? (Meinung) Android & Cross-Platform Mobile Apps 13
P Login und Registrierung Android Anzeige Android & Cross-Platform Mobile Apps 7
J AndroidStudio Login.Java Android & Cross-Platform Mobile Apps 0
B login und register Android & Cross-Platform Mobile Apps 11
J Android LogIn/Registrierung ohne Mail-Adresse Android & Cross-Platform Mobile Apps 1
B Android HTTP Login mit Cookies? Android & Cross-Platform Mobile Apps 3
B Login Activity Android & Cross-Platform Mobile Apps 1
A Android entfernten Login-Script erreichen Android & Cross-Platform Mobile Apps 1
A Android Login über Serveranbindung Android & Cross-Platform Mobile Apps 3
M Firebase RealtimeDatabase - Daten aus Queries in CSV File speichern Android & Cross-Platform Mobile Apps 1
N XY-Plottet keine Daten obwohl Funktion ausgeführt wird Android & Cross-Platform Mobile Apps 4
N XY-Plot plottet keine Daten Android & Cross-Platform Mobile Apps 0
W Background Service Daten verarbeiten/Schleife ect. Android & Cross-Platform Mobile Apps 1
R Android Daten speichern und anzeigen Android & Cross-Platform Mobile Apps 7
MiMa Daten vom Brustgurt bekommen? Android & Cross-Platform Mobile Apps 3
ruutaiokwu Android Daten von "Activity A" nach "Activity B" umleiten? Android & Cross-Platform Mobile Apps 13
P Daten bzw Objekte auf das Handy lokal speichern Android & Cross-Platform Mobile Apps 29
W Android Browser startet immer, bevor die Daten dafür geholt wurden Android & Cross-Platform Mobile Apps 15
T Firestore Daten in Spinner Android & Cross-Platform Mobile Apps 0
L Android Daten von Webseite runterladen, die mit HTTP-Authentifizierung gesichert ist Android & Cross-Platform Mobile Apps 5
B Accelerometer daten umwandeln Android & Cross-Platform Mobile Apps 41
S Android Apk Daten auslesen Android & Cross-Platform Mobile Apps 6
G Android Daten in einer Datenbank speichern Android & Cross-Platform Mobile Apps 1
ATZENPOWER Android Probleme mit mobilen Daten via lte Android & Cross-Platform Mobile Apps 10
S Android Studio MySql Daten in Listview mit sub Item Android & Cross-Platform Mobile Apps 11
A Android Daten in der Cloud speichern (Google) Android & Cross-Platform Mobile Apps 1
K Unbekannte Menge von Daten (Strings oder Ints) an Activity übergeben Android & Cross-Platform Mobile Apps 0
K Android SQLite Query "WHERE _id in (X, Y, Z)" keine Daten Android & Cross-Platform Mobile Apps 6
M Anzeigen der Daten dauert zu lange - Progressdialog? Android & Cross-Platform Mobile Apps 5
K Android DialogFragment mit SimpleCursorAdapter: Auf Daten zugreifen? Android & Cross-Platform Mobile Apps 4
S Daten aus Android Gerät auslesen Android & Cross-Platform Mobile Apps 3
L Android Datei erstellen, Daten einspeichern und auslesen Android & Cross-Platform Mobile Apps 2
B Alle Daten gehen verloren, wenn die Displaysperre aktiviert wird? Android & Cross-Platform Mobile Apps 21
M Daten zwischen mehreren Activities Android & Cross-Platform Mobile Apps 2
M Daten zwischen Activities übergeben Android & Cross-Platform Mobile Apps 7
G Daten von einer Activity zur nächsten übergeben Android & Cross-Platform Mobile Apps 6
G Wie gebe ich dem DrawView die Daten mit? Android & Cross-Platform Mobile Apps 2
V App Daten in Java Applikation Android & Cross-Platform Mobile Apps 3
D Android Daten verwalten Android & Cross-Platform Mobile Apps 2
C Android Listen/Daten aus der SQLLite Datenbank darstellen Android & Cross-Platform Mobile Apps 2
L Android Einlesen und rausschreiben von Daten auf SD Android & Cross-Platform Mobile Apps 3
U Android Daten dauerhaft speichern? Android & Cross-Platform Mobile Apps 2
P Java ME benutzer daten speichern Android & Cross-Platform Mobile Apps 5
7 GPS-Daten auslesen auf Samsung SGH I900 Omnia Android & Cross-Platform Mobile Apps 3
X RMS - Will die Daten auf den PC kopieren Android & Cross-Platform Mobile Apps 3
B Daten in *.txt schreiben Android & Cross-Platform Mobile Apps 7
R Lesen und schreiben von Daten. Android & Cross-Platform Mobile Apps 2
K XDA Orbit: Auslesen der GPS Daten mit J2ME Android & Cross-Platform Mobile Apps 2
M Daten aus Jad-file auslesen Android & Cross-Platform Mobile Apps 2
O eingehende Daten speichern Android & Cross-Platform Mobile Apps 2

Ähnliche Java Themen

Neue Themen


Oben