Passender Server für die App

  • Antworten:8
Andreas Hoffmann
  • Forum-Beiträge: 36

14.12.2012, 11:22:58 via Website

Hallo Leute,:D

ich bin gerade dabei eine App zu programmieren und bin nun an der Serverkomunikation angekommen. Leider habe ich beim einrichten von Server noch nicht viel Erfahrung. Wichtig ist dass sich die App erst mal beim Server anmelden muss. Jeder Nutzer hat hierfür ein Passwort und eine Kennung.
Danach sollen SQLite Tabelleneinträge übertragen (habe gelsesen das Daten mit JSON übertragen werden können). Diese sollen dann Serverseitig in eine Datenbank eingetragen werden. Evtl. müssen noch WAVE-Dateien übertragen werden, die dann auf einem Fileserver gespeichert werden. Ich bin auch am überlegen, ob ich die WAVE-Dateien in der Datenbank hinterlege...

Es geht mir jetzt darum, dass die App sich sicher an den Server anmelden kann und eine sichere Übertragung stattfindet.
Außerdem bin ich mir nicht sicher, ob ich die Anmeldedaten in Klartext auf dem Phone (Datenbank) speichern kann weil ich mir nicht sicher bin ob evtl. andere Apps darauf zugreifen können. Außerdem meine ich gelesen zu haben, dass die Anmeldedaten Serverseitig gespeichert werden sollten. Wenn es da eine andere Möglichkeit gibt wäre ich für einen Tipp sehr dankbar.

LG Andy :V

Antworten
Christian
  • Forum-Beiträge: 307

15.12.2012, 11:26:55 via Website

Hi Andreas Hoffman,

Außerdem bin ich mir nicht sicher, ob ich die Anmeldedaten in Klartext auf dem Phone (Datenbank) speichern kann weil ich mir nicht sicher bin ob evtl. andere Apps darauf zugreifen können.

ähm nein du solltest niemals Anmeldedaten im Klartext irgendwo speichern ganz egal ob es nun Handy oder Server ist.

Idee: Daten liegen auf dem Server -> User schickt Daten an den Server -> Server gibt als Antwort richtig oder falsch zurück -> du speicherst jetzt nur das die Anmeldung erfolgreich war fertig -> beim nächsten Start wird jetzt einfach dieser Speicherstand abgefragt und fertig

Zwecks Sever:
den Tipp von Markus kann ich dir nur ans Herz legen.
1. es ist kostenlos
2. du kannst zwischen zwei Sprachen wählen (Java + Python)

natürlich kannst du dein Problem auch mit jedem x-beliebigen Webserver mit PHP und DB lösen.

mfg Christian

— geändert am 15.12.2012, 11:28:12

Antworten
Andreas Hoffmann
  • Forum-Beiträge: 36

15.12.2012, 13:09:03 via Website

Christian Hempe

Idee: Daten liegen auf dem Server -> User schickt Daten an den Server -> Server gibt als Antwort richtig oder falsch zurück -> du speicherst jetzt nur das die Anmeldung erfolgreich war fertig -> beim nächsten Start wird jetzt einfach dieser Speicherstand abgefragt und fertig

hey,

danke für den Tipp. Wäre es dann nicht besser für jeden angemeldeten User einen Schlüssel zu vergeben und diesen dann auf dem Cient zu speichern (evtl. auch verschlüsselt)

Christian Hempe

schau dir mal die Google APP Engine an.

Ist auch ein guter Tipp aber für mein Projekt leider unpassend. Der Server muss später wahrscheinlich in der VM auf einem Server meiner Hochschule laufen. Deshalb habe ich mir jetzt Ubuntu Server in eine Virtual Box installiert. Ich denke das beste wäre Tomcat drauf zu installieren und dann entwerder mit Servlets oder mit einem Webservice zu arbeiten...
Eine andere Möglichkeit wäre auch einfach mit TCP-Sockets zu arbeiten...

Was findet ihr, wäre die beste Möglichkeit? Habe sowas noch nicht gemacht, muss aber schauen dass eine gewisse Sicherheit gegeben ist.

LG

Antworten
Christian
  • Forum-Beiträge: 307

15.12.2012, 14:19:04 via Website

Hi Andreas,

Wäre es dann nicht besser für jeden angemeldeten User einen Schlüssel zu vergeben und diesen dann auf dem Client zu speichern (evtl. auch verschlüsselt)

ok ich versteh nicht ganz was du meinst.
Meinst du das in der Art: User meldet sich an -> Schlüssel wird generiert(auf dem Server oder Handy?) -> Schlüssel wird gespeichert und nun?
Dient der Schlüssel dazu nur festzustellen ob der User sich angemeldet hat bzw angemeldet ist oder KANN der User sich mit dem Schlüssel auch anmelden?
Weil sollte letzteres zutreffen wären wir wieder am Anfang der Diskussion.
Weil ob ich jetzt einen Schlüssel speichere oder Name und Password, wo wäre da der Unterschied?

Der Server muss später wahrscheinlich in der VM auf einem Server meiner Hochschule laufen. Deshalb habe ich mir jetzt Ubuntu Server in eine Virtual Box installiert. Ich denke das beste wäre Tomcat drauf zu installieren und dann entwerder mit Servlets oder mit einem Webservice zu arbeiten...
Eine andere Möglichkeit wäre auch einfach mit TCP-Sockets zu arbeiten...

Du solltest vielleicht erstmal mit deinem betreuenden Prof. bzw dem Rechenzentrum deiner Hochschule abklären welche Verbindungen die nach draußen zu lassen.(als beispiel: HTTP oder direkter Socket)
Und dann wär es auch nett schlecht mit denen abzuklären was da dann nachher in der VM läuft soll bzw laufen darf. Nicht das du jetzt irgendwas anfängst und die dann sagen ne is nicht.

Musst du eigentlich auch die "Software" die auf dem Server läuft erstellen also gemeint ist damit das Script/Programm was die Anfrage entgegen nimmt und die Daten dann in eine DB schreibt oder so weiterverarbeitet wie du sie brauchst.

mfg Christian

— geändert am 15.12.2012, 14:22:32

Antworten
Andreas Hoffmann
  • Forum-Beiträge: 36

15.12.2012, 14:35:24 via Website

Christian Hempe

Meinst du das in der Art: User meldet sich an -> Schlüssel wird generiert(auf dem Server oder Handy?) -> Schlüssel wird gespeichert und nun?
Dient der Schlüssel dazu nur festzustellen ob der User sich angemeldet hat bzw angemeldet ist oder KANN der User sich mit dem Schlüssel auch anmelden?
Weil sollte letzteres zutreffen wären wir wieder am Anfang der Diskussion.
Weil ob ich jetzt einen Schlüssel speichere oder Name und Password, wo wäre da der Unterschied?

Habe gedacht das der Server nach jeder Anmeldung einen Schlüssel generiert der dann auf dem Client und auf dem Server gespeichert wird. Es ist doch ein Unterschied, wenn der Client sich mit einem bestimmten Schlüssel meldet, als wenn er einfach sagt "ich habe mich schon angemeldet"
Ich weiß ja nicht, wie das professionell geregelt wird, aber ein "hallo server ich bin schon angemeldet" ist doch auch eine kleine Sicherheitslücke

Christian Hempe

Du solltest vielleicht erstmal mit deinem betreuenden Prof. bzw dem Rechenzentrum deiner Hochschule abklären welche Verbindungen die nach draußen zu lassen.(als beispiel: HTTP oder direkter Socket)

Socket oder HTTP ist doch eigentlich egal... Ich kann doch ein Socket auf dem Default-HTTP-Port aufmachen. Ich denke nicht, dass das Rechenzentrum in den TCP-Body reinschaut =) Einen offenen Port brauche ich aber natürlich.

Christian Hempe

Musst du eigentlich auch die "Software" die auf dem Server läuft erstellen also gemeint ist damit das Script/Programm was die Anfrage entgegen nimmt und die Daten dann in eine DB schreibt oder so weiterverarbeitet wie du sie brauchst.

Ja

Antworten
Christian
  • Forum-Beiträge: 307

15.12.2012, 15:10:34 via Website

Hi Andreas,


Habe gedacht das der Server nach jeder Anmeldung einen Schlüssel generiert der dann auf dem Client und auf dem Server gespeichert wird. Es ist doch ein Unterschied, wenn der Client sich mit einem bestimmten Schlüssel meldet, als wenn er einfach sagt "ich habe mich schon angemeldet"
Ich weiß ja nicht, wie das professionell geregelt wird, aber ein "hallo server ich bin schon angemeldet" ist doch auch eine kleine Sicherheitslücke

Ja es ist sicherer aber nicht als "Hallo Server ich bin schon angemeldet" :)

Beispiel:
1.) User meldet sich mit PW und Name an -> Server erstellt Schlüssel -> Schlüssel wird auf Server gespeichert -> Schlüssel wird an den Client übertragen und dort gespeichert -> User nutzt die Anwendung und beendet sie danach
2.) User start die Anwendung neu -> Schlüssel wird geladen und an den Server geschickt -> Server validiert Schlüssel -> Server sagt ok oder nicht ok

So wenn ich jetzt an den Schlüssel komme kann ich mich als dieser Benutzer ausgeben und mich am Server anmelden.

Was nicht mehr geht (im Gegensatz zu "Hallo Server ich bin schon angemeldet") ich kann mich nicht mehr als jeder ausgeben.

EDIT ANFANG:
Was du aber machen könntest um auch den Schlüssel klau zu erschweren wäre die Verwendung eines "Salt".
Das würde ungefähr so aussehen:
1.) User meldet sich mit PW und Name an -> Server erstellt Schlüssel -> Schlüssel wird auf Server gespeichert -> Schlüssel wird an den Client übertragen und dort gespeichert -> User nutzt die Anwendung und beendet sie danach
2.) User start die Anwendung neu -> Schlüssel wird geladen und um eine Salt erweitert -> Schlüssel an Server schicken -> Server lädt den Schlüssel aus DB -> auch dieser Schlüssel wird mit dem Salt erweitert -> Server validiert Schlüssel -> Server sagt ok oder nicht ok

Beispiel:
1//diesen hat der Server stellt und er wird im App gespeichert
2String publicKey = "keyAbc";
3//der Salt ist private er wird verwendet um den Key zu verändern
4String salt = "saltAbc";
5
6String ZUM_VERSENDEN = publicKey + salt;

EDIT ENDE


Christian Hempe

Du solltest vielleicht erstmal mit deinem betreuenden Prof. bzw dem Rechenzentrum deiner Hochschule abklären welche Verbindungen die nach draußen zu lassen.(als beispiel: HTTP oder direkter Socket)

Socket oder HTTP ist doch eigentlich egal... Ich kann doch ein Socket auf dem Default-HTTP-Port aufmachen. Ich denke nicht, dass das Rechenzentrum in den TCP-Body reinschaut =) Einen offenen Port brauche ich aber natürlich.

Christian Hempe

Musst du eigentlich auch die "Software" die auf dem Server läuft erstellen also gemeint ist damit das Script/Programm was die Anfrage entgegen nimmt und die Daten dann in eine DB schreibt oder so weiterverarbeitet wie du sie brauchst.

Ja

Klar kannst du alles machen wenn die damit einverstanden sind ist alles cool. Doof wird es nur wenn nicht.
Gerade da du noch die "Software" schreiben musst wär ein abklären schon Sinnvoll. Schließlich kannst du hier ja die verschiedensten Sprachen und Technologien nutzen. Weil gerade was die Wartbarkeit an geht wär es wahrscheinlich nicht schlecht etwas zu nehmen wo sich einer der Leute da dann auch mit auskennt.
Aber das hängt auch wieder ein bissel damit zusammen was dein "App" ist also nur eine "simples" Studentenprojekt das du im Rahmen deines Studiums machst oder zum Beispiel ne Arbeit als Wissenschaftliche Hilfskraft. Vielleicht bist du auch ein Prof und schreibst was für die Hochschule. Und natürlich auch davon ob dein App "nach dir" noch genutzt wird.


Mfg Christian

— geändert am 15.12.2012, 17:02:16

Antworten
Andreas Hoffmann
  • Forum-Beiträge: 36

18.12.2012, 21:22:46 via Website

Christian Hempe

Klar kannst du alles machen wenn die damit einverstanden sind ist alles cool. Doof wird es nur wenn nicht.
Gerade da du noch die "Software" schreiben musst wär ein abklären schon Sinnvoll. Schließlich kannst du hier ja die verschiedensten Sprachen und Technologien nutzen. Weil gerade was die Wartbarkeit an geht wär es wahrscheinlich nicht schlecht etwas zu nehmen wo sich einer der Leute da dann auch mit auskennt.
Aber das hängt auch wieder ein bissel damit zusammen was dein "App" ist also nur eine "simples" Studentenprojekt das du im Rahmen deines Studiums machst oder zum Beispiel ne Arbeit als Wissenschaftliche Hilfskraft. Vielleicht bist du auch ein Prof und schreibst was für die Hochschule. Und natürlich auch davon ob dein App "nach dir" noch genutzt wird.

Hallo,

habe mich nicht mehr gemeldet, weil ich erst mit dem Professor über den Server reden wollte.
Die Arbeit ist ein Studentenprojekt, was "nach mir" noch genutzt werden soll.

Christian Hempe

falls die ganze Sache noch aktuell ist kannst du dir ja mal OAuth ansehen.

Danke für den Tipp =) Werde es mir auf jeden Fall anschauen.
Ich denke ich werde (wenn es von der Hochschule her möglich ist) einen Glassfish-Server mit einem MySQL-Server installieren. Hoffe, dass das für meine Zwecke geeignet ist.

LG

Antworten