Sicherer Login per Java

  • Hey,


    ich arbeite schon etwas länger mit Java, aber ich bräuchte mal kurz einen Rat. Und zwar ist Java ja recht "unsicher", bzw. ist es ja sehr einfach eine .jar zu decompilen und dann intime Infos z.B herauszulesen.
    Ich habe in meiner Anwendung eine AnmeldeMaske (JTextField & JPasswordField), und nun möchte ich mich sicher einloggen. (Daten aus einer MYSQL Datenbank abrufen).


    Nun wäre es ja ziemlich doof, das eingegebene Passwort, oder die MYSQL Daten irgendwo in einer Klassenvariable abzulegen also habe ich mir folgendes überlegt. Beim Klicken auf Login encrypte ich das eingegebene Passwort mit einem Double Sha1 Hash, und sende Usernamen und das gehashte Passwort an eine .php Datei auf dem Server (POST), welche den Login mit diesen Daten überprüft und bei erfolgreichem Login, mir die Daten aus der Datenbank zurück an die Anwendung sendet. (PHP gibt die Daten aus, und ich lese sie per InputStreamReader ein).


    Nun würde ich gerne wissen, wie hoch das Sicherheitsrisiko beim Login ist, und in wie weit das ganze gesniffed werden kann (das gehashte PW ist ja "sicher", aber die Daten aus der Datenbank lese ich ja non-hashed von der Website aus ein.)


    Habt ihr bessere Vorschläge?


    Das ganze ist eine Anwendung und kein Applet!


    Gruß

  • Jap, wenn du so was machen möchtest, gibt es im Prinzip nur noch eine sicherere Methode: Mittels einem TCP-Server, welcher die Daten die du brauchst aus der Datenbank ausliest und mit deiner Anwendung kommuniziert.
    Jedoch ist das auch eine gute Methode, und ziemlich sicher.


    Solange du darauf achtest, das man im PHP Script keine SQL-Injection vornehmen kann, und bspw. noch einen gehashten Timestamp (mit Salt) übergibst, ist das ziemlich sicher.


    #Brotfischbaron


    In schā'a llāh

  • Solange du darauf achtest, das man im PHP Script keine SQL-Injection vornehmen kann, und bspw. noch einen gehashten Timestamp (mit Salt) übergibst, ist das ziemlich sicher.


    Jap sicher vor SQL-Injection ist das PHP Script.
    Wie genau meinst du das mit dem Timestamp?


    @Unbekannter, das mache ich ja schon, nur mit POST_METHOD anstatt GET_METHOD :)


    Danke.

  • Du erstellst in deiner Java Anwendung einen Unix Timestamp.


    Bspw. "183912938". An diesen hängst du dann einen Salt an, also z.B. "183912938.blabla". Das ganze verlüsselst du dann bspw. mit Base64 o. Ä. und gibst es an das PHP Script.
    Dieses entschlüsselt das wieder und liest den Timestamp aus, löscht also den Salt. Dann überprüft das PHP Script, ob die Timestamp-Differenz des abgeschickten Timestamps mit der aktuellen (im PHP Script generierten) Zeit kleiner als bspw. 5 Sekunden ist und gibt nur dann die Daten frei.


    Schützt bspw. vor Man-In-The-Middle.


    #Brotfischbaron


    In schā'a llāh

  • Schreib dir doch schnell einen Java Masterserver mit MySQL Backend, wobei ich sogar UDP präferiere. Dann am besten noch nen ThreadPool, in etwa so:



    MySQL Backend dann über JDBC


    Den Worker dann dementsprechend:

    2 Mal editiert, zuletzt von JJJan ()