Sichere PHP-Schnittstelle

  • Antworten:11
Andy N.
  • Forum-Beiträge: 3.112

15.02.2011, 11:54:46 via Website

Hallo,

Daten über eine PHP-Schnittstelle auszutauschen (zB mit einer MySql-Datenbank) ist ja nicht besonders schwer. Am besten die Daten in eine XML packen und dann an die jeweilige Seite schicken.

Aber welche Konzepte gibt es, das ich a) sicher gehen kann, dass die Anfrage von meiner App kommt und nicht von einem Browser oder sonstigen und b) wie kann ich die Anfrage sicher einem User zuordnen (möglichst einfach)?

Für b) wird vermutlich SSL die beste Möglichkeit sein, oder kennt Ihr etwas besseres? Kann man wohlmöglich eine eindeutige Kennung dem Android-Gerät oder noch besser einem Google-Account zuordnen?

Ich wäre für Lösung- oder Denkansätze dankbar.

Gruß Andy.

Antworten
Gelöschter Account
  • Forum-Beiträge: 107

15.02.2011, 21:44:58 via Website

Andy N.
Hallo,

Daten über eine PHP-Schnittstelle auszutauschen (zB mit einer MySql-Datenbank) ist ja nicht besonders schwer. Am besten die Daten in eine XML packen und dann an die jeweilige Seite schicken.

Ich würde JSON bevorzugen. Da werden die übertragenen Daten deutlich kleiner.

Andy N.
Aber welche Konzepte gibt es, das ich a) sicher gehen kann, dass die Anfrage von meiner App kommt und nicht von einem Browser oder sonstigen

HTTP User Agent im Request-Header (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.43). Ggf könntest du den Request noch mit einer eindeutigen Kennung bestücken.

Andy N.
und b) wie kann ich die Anfrage sicher einem User zuordnen (möglichst einfach)?

Für b) wird vermutlich SSL die beste Möglichkeit sein, oder kennt Ihr etwas besseres? Kann man wohlmöglich eine eindeutige Kennung dem Android-Gerät oder noch besser einem Google-Account zuordnen?

SSL ist nur eine transparente Verschlüsselung. Die Idee mit der Device-ID ist nicht schlecht. User-IDs aus anderen Systemen zu verwenden ist eine gute Idee, da die sich ändern können, sowohl im Wert als auch im Format und Typ.

Gruß Carsten

Seid nett zueinander: AndroidPIT-Regeln ;)

Antworten
Andy N.
  • Forum-Beiträge: 3.112

16.02.2011, 16:31:43 via Website

Es muss nicht 100% sicher sein, den User Agent abfragen könnte man leicht täuschen, aber wahrscheinlich ausreichend (kann ein php-Script einen Browser vortäuschen?).
Eine Kennung übertragen hab ich mir auch schon gedacht, allerdings witzlos, da die ja mit der Anfrage übersendet wird oder wie müsste ich das am besten abfragen.

Mit der SSL Verschlüsslung meinte ich eine normale Anmeldung mit Benutzernamen und Kennwort.
Aber ich denke es wäre ne ganz gute Idee, wenn der Anwender einmal sich mit Benutzernamen und Kennwort oder einer zugesendeten Kennung anmeldet und beim Server wird dann die Geräte-ID hinterlegt, die dann in Zukunft zur Authentifizierung hergenommen wird.

Gruß Andy

— geändert am 16.02.2011, 16:32:05

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

16.02.2011, 16:39:00 via Website

Andy N.
Es muss nicht 100% sicher sein, den User Agent abfragen könnte man leicht täuschen, aber wahrscheinlich ausreichend (kann ein php-Script einen Browser vortäuschen?).
Das kannst jedes Programm frei angeben, das HTTP Anfragen stellt.
Es ist einfach ein Wert im Kopf der HTTP-Anfrage.
Theoretisch könntest du auch in einer Konsole mit Telnet arbeiten und sagen du bist ein Firefox :)

Andy N.
Mit der SSL Verschlüsslung meinte ich eine normale Anmeldung mit Benutzernamen und Kennwort.
Das sind aber 2 verschiedene Dinge.
Eine mit SSL gesicherte Verbindung ist auch ohne Anmeldung möglich, sie erfordert lediglich Zertifikate.
Es macht aber Sinn einen Login über SSL-gesicherte Verbindung abzuwickeln, weil sonst die Benutzerdaten im Klartext übertragen werden und somit abgegriffen werden können.

— geändert am 16.02.2011, 16:39:21

Antworten
Gelöschter Account
  • Forum-Beiträge: 107

16.02.2011, 16:48:51 via Website

Rafael K.
Andy N.
Es muss nicht 100% sicher sein, den User Agent abfragen könnte man leicht täuschen, aber wahrscheinlich ausreichend (kann ein php-Script einen Browser vortäuschen?).
Das kannst jedes Programm frei angeben, das HTTP Anfragen stellt.
Es ist einfach ein Wert im Kopf der HTTP-Anfrage.
Theoretisch könntest du auch in einer Konsole mit Telnet arbeiten und sagen du bist ein Firefox :)

Aber er könnte als User-Agent "MySpecialAppUserAgent" verwenden. Dann müsste jemand auf die Idee kommen, den auch zu verwenden - vorausgesetzt er hat ihn gesnifft. In meinen Augen reicht das aus.

Seid nett zueinander: AndroidPIT-Regeln ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 107

16.02.2011, 16:50:46 via Website

Andy N.

Eine Kennung übertragen hab ich mir auch schon gedacht, allerdings witzlos, da die ja mit der Anfrage übersendet wird oder wie müsste ich das am besten abfragen.

Indem du den HTTP-Header oder auch die Request-Daten selbst abfragst? Du hast doch auf beiden Seiten volle Kontrolle über das was du da hin und her schickst?!

Seid nett zueinander: AndroidPIT-Regeln ;)

Antworten
Andy N.
  • Forum-Beiträge: 3.112

16.02.2011, 17:15:51 via Website

Ja, aber wenn ich diese Anfrage mit Kennung zB von meinem Firefox schicke gibt es auch die gewünschte Antwort, dann kann ich die Kennung doch gleich weglassen, oder?

Aber ich denke User-Agent ist schon eine gute Idee und völlig ausreichend.

— geändert am 16.02.2011, 17:16:35

Antworten
Gelöschter Account
  • Forum-Beiträge: 107

16.02.2011, 17:27:14 via Website

Andy N.
Ja, aber wenn ich diese Anfrage mit Kennung zB von meinem Firefox schicke gibt es auch die gewünschte Antwort, dann kann ich die Kennung doch gleich weglassen, oder?

Aber ich denke User-Agent ist schon eine gute Idee und völlig ausreichend.


Wieso? Du fragst von dem Request den User-Agent ab. Der ist nicht "Firefox" sondern "MySuperDuperMegaFunkyAppYouAreUsing"... Und nur Requests von dem werden akzeptiert. Dann muss der geneigte Hacker die Agent-Kennung kennen (per sniffing) und einstellen. Ich hatte das auch nicht als Sicherheitsmerkmal sondern als Filter verstanden. Willst du Sicherheit, kommst du um Nutzerkennungen mit Passwörtern und/oder Zertifikaten nicht herum.

Seid nett zueinander: AndroidPIT-Regeln ;)

Antworten
Rover
  • Forum-Beiträge: 18

29.03.2011, 23:14:27 via Website

Hallo Andy,

was spricht dagegen die anfragen an den Server (php) ein bisschen zu verschlüsseln, kann der Server die Anfrage entschlüsseln, wird die akzeptiert, sonnst nicht, alles andere lässt sich manipulieren bzw. raus finden und dein Server via Browser "missbrauchen" :-)

Antworten
Gelöschter Account
  • Forum-Beiträge: 107

30.03.2011, 08:01:38 via Website

Security by Obscurity.. Jaaa, damit ist M$ sehr weit gekommen *lol*

Seid nett zueinander: AndroidPIT-Regeln ;)

Antworten