Android Server-Login Daten in der App sicherer hinterlegen?

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
 
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.
 
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.
 
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
 
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
 
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.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben