# Datenbankanbindung - Passwort schützen



## Maddin28 (10. Apr 2007)

Hi

ich hab eine Netzerkanwendung in Java, mit Server- und ClientKlassen. Nun soll diese Anwendung an eine Datenbank angebunden werden. Die Datenbank ist zwar nur vom Server aus erreichbar (nur localhost hat Zugriff), dennoch möchte ich das Datenbank Passwort nicht jedem auf die Nase binden. Nun stellt sich mir die Frage, ob es ausreicht, das Schreiben und Lesen von der Datenbank ausschließlich über die ServerKlassen zu steuern. Damit sollte eigentlich das Passwort den Clients verwährt bleiben, auch wenn diese die ClientKlasse decompilieren und somit einsehen können.
Ein Problem besteht natürlich, nämlich, dass jeder durch den Code weiß, wie ich gewisse Daten in die Datenbank schreibe, z.B. auf den Clients durch eine Methode db_wertschreiben(testfeld, testwert); 
Damit könnten theoretisch Netzwerkpakete so "verunstaltet" werden, dass jemand Daten in der DB manipulieren könnte.
Ok ich weiß, dass das ziemlich paranoid ist, trotzdem haben sicher viele das selbe Problem und es gibt sicher Lösungen dafür. Das Einzige was mir einfällt, wäre den gesamten Datenstrom zu verschlüsseln, oder hat jemand nen Geheimtip für mich???

Thx


----------



## Wildcard (10. Apr 2007)

Warum abstrahierst du nicht weiter?
Der Server kümmert sich um die DB und der Client kennt nur Objekte.


----------



## Maddin28 (10. Apr 2007)

Wie meinst du das? Der Server kümmert sich um die DB, ok. Aber was meinst du mit "der Client kennt nur Objekte"??


----------



## Wildcard (10. Apr 2007)

Warum brauchst du Methoden wie db_wertschreiben(testfeld, testwert); ?
Benutz ein Objekt basiertes Datenmodel und überlass es dem Server (zB mit Hibernate) das Datenmodel in der DB zu persistieren.
Dein Client braucht gar nicht zu wissen das es überhaupt eine DB gibt.


----------



## SlaterB (10. Apr 2007)

ändert wenig am grundsätzlichen Problem, dass jemand die Übertragung ändern kann,
hat aber wirklich nix mit DB zu tun, schon gar nicht mit 'Passwort schützen' 

Verschlüsselung im Web gibts, ja, z.B. SSL,
wenn jemanden den Client decompiliert, dann kann man die Objekte natürlich VOR dem Verschlüsseln ändern 

außerdem: man könnte doch diese 'falschen Daten' genauso gut in den Client eintippen,
wozu irgendwas manipulieren?

falls der Client eine bestimmte Art von Eingabe verhindert (Überweisungen nach Honolulu),
dann sollte der Server dies bei den empfangenen Daten prüfen!, dann kann nix mehr (weniger) schiefgehen


----------



## maddin28 (10. Apr 2007)

Nun das Eintippen von "falschen Daten" über den Client ist nicht definitiv nicht möglich. Im client werden gewisse Daten eingegeben und an einem bestimmten Punkt errechnet eine ClientMethode einen Wert (z.B. 12345,23), der dann an den Server übermittelt wird. 
So nun ist es ein Leichtes mit den vorhandenen Sourcen diesen Wert zu manipulieren. Man könnte diese Methode serverseitig machen, klar, aber dann wiederum können die Werte die zur Berechnung führen  (also der ServerMethode übergeben werden) ganz einfach manipuliert werden.
Verschlüsselung hast du recht, bringt auch nichts. Aber was tun???


----------



## SlaterB (10. Apr 2007)

nur weil du halblogische Sätze fabrizierst, wird meine Logik doch nicht weniger logisch 

was der Client prüfen kann, kann auch der Server prüfen, fertig,

> aber dann wiederum können die Werte die zur Berechnung führen (also der ServerMethode übergeben werden) ganz einfach manipuliert werden. 

dann ist das Problem, dass man nicht die Ergebnisse 'direkt in den Client eintippen kann'
sondern die Werte die dazu führen,
das ist doch egal, das verschiebt das Problem nur (nicht sehr weit)



---------

der Client darf eben nur geringe Rechte haben, dann kann ein Maß an Sicherheit geleistet werden,
wenn der Client die Macht hat und der Server nur dumm weiterleitet,
dann ist es eben so


----------

