Wie garantiere ich eine sichere Verbindung zwischen einer Android Application und einer MySQL Datenbank?

2 Antworten

Hallo,

du hast einen falschen und unlogischen Ansatz.

Wo wird PHP ausgeführt? Richtig, Serverseitig. Warum willst du also PHP in deine App einbauen? Richtig, macht keinen Sinn.

Du solltest dir vielleicht nochmal Grundlegend die Kommunikation von solchen System angucken und mit welcher Sprache du Android Apps programmieren kannst. Dann wirst du ganz schnell merken, dass dein vorhaben nicht ganz so einfach umzusetzen ist, wie du vielleicht dachtest. Für dein vorhaben wirst du eine Art Schnittstelle (API) bauen müssen und über diese kommunizieren.

Denk auch dran, die Verbindung bzw. die Daten, welche dann zur API und von dieser zurück gesendet werden, zu Verschlüsseln (z.B. SSL).

Grüße

Danke für die Antwort, ich gebe zu die Idee, das PHP-Script in der App zu integrieren war sehr unausgereift.

Ich habe mich diesbezüglich nun weiter erkundigt und alle Antworten die gegeben wurden waren hauptsächlich auf die Kommunikation zwischen einem Serverseitigem PHP-Script und einem Java Code auf dem Handy ausgelegt, also meine aktuelle Variante.

Gibt es jemanden der mir bitte genauer erklären kann wie ich dann eine (serverseitige?)  API erstelle und über diese Kommunizieren kann?  

0
@Swarley98

Das ist ja schon mal richtig das du Java in deiner App hast und PHP nur auf dem Server. Wenn du das vorher so meintest, dann entschuldige bitte. Das habe ich dann falsch verstanden.

Weist du denn überhaupt was eine API ist?

Wenn ja, sollte sich das von selbst erklären.

http://lmgtfy.com/?q=php+eigene+api+erstellen

Tipp: Schau dir Json an, ist für kleinere Datenmengen am einfachsten (kannst du aber nicht für Down- oder Uploads benutzen).

1
@Malemeister

Ok Vielen dank schonmal dafür :) ! Aber wenn ich das Richtig verstehe ist dies genau das was ich schon habe. Um weiter Missverständnissen vorzubeugen hier mein schon vorhandener Code:

Datenbank Klasse(Endgerät):

    public static JSONArray SqlGet(String sql)

{
List nameValuePairs = new ArrayList(1);
nameValuePairs.add(new BasicNameValuePair("sql", sql));
String result ="";
InputStream isr =null;
JSONArray jArray= new JSONArray();
try
{
HttpPost httppost = new HttpPost(Adresse+"/SqlGet.php");
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response= httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
isr=entity.getContent();
} catch (Exception e) {
Log.e("Database","Connection"+e.toString());
}

try{
BufferedReader reader = new BufferedReader(new InputStreamReader(isr,"iso-8859-1"),8);
StringBuilder sb = new StringBuilder();
String line = null;
while((line = reader.readLine()) != null)
{
sb.append(line+"\n");
}
isr.close();

result=sb.toString();

}
catch (Exception e) {
Log.e("Database","String erzeugen "+e.toString());
}
try
{

jArray = new JSONArray(result);

} catch (Exception e) {
Log.e("Database","Json Array "+e.toString());
}
return jArray;
}

SqlGet.php(Serverseitig):

<?php

$con = mysql_connect("localhost", "root" , "");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("communitysimulator", $con);

$sql=$_POST['sql'];

$result = mysql_query($sql);
$output="";

if($result)
{
while($row = mysql_fetch_assoc($result))
{
$output[]=$row;
}

print(json_encode($output));
}

mysql_close($con);

?>

So weit so gut. Ich habe noch weitere Funktionen die dann je nach Anfrage verschiedene JsonArrays auswerten. 

Mein weiterhin bestehendes Problem ist jedoch, wie ich diese Variante sicher mache. Wie man sieht sind hier Benutzername und Passwort der Datenbank einsehbar und wer ein wenig nachdenkt kann ja auch einen Post an dieses PHP Script schicken und erhält somit vollen Zugriff auf die Datenbank.

Liebe Grüße Swarley

0
@Swarley98

Hallo,

sieht schon mal gar nicht so schlimm aus wie ich anfangs dachte.

4 Sachen die mir beim schnellen überfliegen aufgefallen sind:

1. Du nutzt bei PHP veraltete Funktionen (mysql_). Das solltest du ändern, da diese Funktion/en in der neusten PHP Version nicht mehr Verfügbar sind. Dein Script würde also gar nicht funktionieren.

2. Du nutzt keine API. Du fragst lediglich eine Seite im Internet per HTTP Request ab. Du solltest dir selbst eine API Schnittstelle programmieren. Du scheinst dir aber noch immer nich angeguckt zu haben was API überhaupt ist. Sonst würdest du es ja schon umgesetzt haben.

Wenn du dir mal anschaust was API ist und wie sowas überhaupt funktioniert, dann wüsstest du auch wie du eine sichere Kommunikation zwischen Clienten und Server herstellen kannst.

3. Du solltest deine Verbindung schützen. Mach also keinen einfachen HTTP Request, sondern nutze SSL (HTTPS)!

4. Schau dir mal SQL Injection an. Das betrifft in diesem Falle vorallem dein PHP Script. Vor sowas solltest du dich unbedingt schützen, sonst macht dir jemand deine komplette Datenbank kaputt.

Grüße

1

Dir ist bewusst , daas niemand ohne in deinen Server einzubrechen einfach deine PHP-Datei lesen kann?

Bedeutet die leute sehen nicht qas innerhalb der PHP-Tags steht

MFG xGlumi

Woher ich das weiß:eigene Erfahrung – Programmier/IT Erfahrung seit 2009 (Freizeit und Beruf)