Sichere Passwortübergabe bei Datenbank

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo allerseits,

folgende Problemstellung:
Ich habe ein selbstgeschriebenes Programm, welches auf eine MySQL Datenbank zugreift, die im Internet liegt. Dieses Programm soll auch an andere (evtl. nicht vertrauenswürdige) Personen weitergegeben werden. Damit der Zugriff auf die Datenbank auch funktioniert, müssen logischerweise auch die Zugangsdaten, welche ja im SourceCode stehen mitgegeben werden. Ich gebe jedoch verständlicherweise nur ungern meine Passwörter mit. Und soweit ich mich erinnnere, kann man aus dem erzeugten Bytecode ja wieder den Quelltext erzeugen oder?!
Da der Zugriff auf die Datenbank ja direkt erfolgt, ist auch ein Passwort Hashing nicht möglich.
Welche Methoden gibt es, ein Passwort in den Quelltext zu schreiben, ohne dass man es nachträglich auslesen kann?

Vielen Dank
 
Anonymous hat gesagt.:
...
Welche Methoden gibt es, ein Passwort in den Quelltext zu schreiben, ohne dass man es nachträglich auslesen kann?
...
Kurz und knapp, gar keine.
Du kommst um einen "richtigen Server" nicht herum.
 
Da das ganze nur unter Windowssystem laufen muss: wenn ich aus der jar-Datei ne exe erstelle. Ist es dann ncoh auszulesen?
 
Wozu die zugangsdaten in den Quellcode schreiben? Schreib ne Configurationsdatei (in die man z.b. von hand oder per Programm schreiben kann) und gibt eine dummy Datei oder gar keine mit.
 
und was soll jemanden daran hindern die Konfigurationsdatei auszulesen?
 
Hier liegt sicherheitstechnisch noch an anderer Faux Pas vor:

Du musst deine DB ja so konfigurieren, dass jeder von jedem anderen Rechner im Netz aus mit User + Passwort Zugriff auf deine Daten bekommt. Das ist mal hübsch unsicher, denn um deine Datenbank zu hacken reicht ein einfacher Brute-Force-Angriff.

Aus Sicht der Sicherheit ist das ein kategorischer Fehler. Die Einsatzmöglichkteiten von JDBC sind auch sicherheitstechnischer Sicht recht begrenzt. Oft kann man nichtmal firmeninterne Anwendungen mit JDBC entwickeln, weil interne Security Policies das Öffnen der Ports in der Firewall nicht erlauben (zurecht).

Folgender Link beschreibt die Nutzung einer SSL-gesicherten Verbdinung für JDBC mit Postgres, vielleicht hilft er dir aber auch:

http://www.linuxfocus.org/Deutsch/March2003/article285.shtml
 
Die Datenbank ist vom Hoster sowieso so konfiguriert, dass der Zugriff von außen erlaubt ist. Bisher gab es da wohl keine größeren Probleme. Die Verwendung von SSL wäre hier sicherlich sinnvoll, darüber werde ich mal nachdenken.

Leider muss ich auf eine zentrale Datenbank von verschiedenen Rechnern aus zugreifen können. Im Zweifelsfall werde ich das ganze über PHP lösen, würde das ganze jedoch lieber über eine Desktop-Anwendung steuern, als über eine Website.

Hat niemand eine Idee, wie man sich der Sache am besten annehmen könnte, oder ist Java dafür doch der falsche Ansprechpartner?
 
Vorschlag zur Güte:
Leg User und Passowrt verschlüsselt in einem Skript auf dem Server ab. Wenn die Leute deinen Client starten, lass ihn das Skript aufrufen, die verschlüsselten Zugangsdaten ziehen, entschlüssle sie in deinem Client und fertig.

So hast du das Passwort nirgends auf dem Client abgelegt. Nun müsste man schon den Client disasselblieren und den Zugriff auf die verschlüsselten Daten und deren Entschlüsselung nachbilden, um an die Daten zu kommen. Wenn du nun noch das Skript mit Zugangsdaten schützt und deinen Usern diese gibst, kannst du noch protokollieren wer wann drauf zugegriffen hat und kannst auch gezielt freischalten und sperren..
 
AlArenal hat gesagt.:
Vorschlag zur Güte:
Leg User und Passowrt verschlüsselt in einem Skript auf dem Server ab. Wenn die Leute deinen Client starten, lass ihn das Skript aufrufen, die verschlüsselten Zugangsdaten ziehen, entschlüssle sie in deinem Client und fertig.

So hast du das Passwort nirgends auf dem Client abgelegt. Nun müsste man schon den Client disasselblieren und den Zugriff auf die verschlüsselten Daten und deren Entschlüsselung nachbilden, um an die Daten zu kommen. Wenn du nun noch das Skript mit Zugangsdaten schützt und deinen Usern diese gibst, kannst du noch protokollieren wer wann drauf zugegriffen hat und kannst auch gezielt freischalten und sperren..
...dann lieber gleich die Daten über das Skript abfragen. :bae:
 
Anonymous hat gesagt.:
dann lieber gleich die Daten über das Skript abfragen. :bae:
Wie stellst du dir das vor? Die Query an ein PHP Script schicken, welches die Zugangsdaten überprüft, und die selbe Query an die Datenbank schickt? Dürfte sehr performant sein....
 
Anonymous hat gesagt.:
...dann lieber gleich die Daten über das Skript abfragen. :bae:

Klar, kann er mit SOAP oder XML-RPC erledigen, nur muss er das Ganzen Datengeschiebe von Hand stricken und hat den ganzen zusätzlichen Aufwand. Wenn er unbedingt JDBC nutzen will, hat er nicht allzuviele Möglichkeiten.
 
Anonymous hat gesagt.:
Anonymous hat gesagt.:
dann lieber gleich die Daten über das Skript abfragen. :bae:
Wie stellst du dir das vor? Die Query an ein PHP Script schicken, welches die Zugangsdaten überprüft, und die selbe Query an die Datenbank schickt? Dürfte sehr performant sein....
Seine Hauptsorge ist, dass Unbefugte Blödsinn mit seinem Server anstellen,
wenn sie an das Passwort der Datenbank rankommen.
Egal was für Verrenkungen du machst, Passwörter im Code des Clients
sind einfach nicht sicher bzw. können leicht gefunden werden.
Dazu brauche ich nicht mal den Code zu analysieren, sondern schaue
mir die Kommunikation mit dem Server an und schon habe ich es.
Klartext: Die Datenbank hinter einer zusätzlichen Schicht verstecken
ist immer die bessere Lösung.

Über die Probleme mit der Performance würde ich mir erst dann Gedanken
machen, wenn es überhaupt welche gibt. Serverseitig kannst du einen Cache
einsetzen, zentral optimieren, ohne die Clients zu ändern und und und...
 
Wenn ich das richtig verstehe soll ich das also am besten so lösen:

In der Desktopanwendung werden entweder Passwörter hinterlegt, oder müssen eingegeben werden.
Mit diesen Zugangsdaten meldet sich die Anwendung bei einem Skript (was wäre hier sinnvoll? JSP, PHP... ?) auf dem Webserver an. Der Webserver greift auf die Datenbank zu und gibt das Ergebnis an die Anwendung zurück welche dann so damit weiterarbeitet, als läge die Datenbank auf dem eigenen Rechner.

Dann wäre noch die Frage ob es ohne weiteres möglich ist ein MySQL-Result einfach "roh" an Java zu übergeben und dieses damit weitergeben kann.

Wenn das o.g. der beste "sichere" Weg ist, wäre es nett, wenn das nochmal jemand der versierteren User bestätigen könnte ob ich das richtig verstanden habe.

Vielen Dank für eure Antworten. Habt mir schonmal sehr weitergeholfen, hatte schon Angst ich müsste ne reine Webanwendung schreiben. 😉
 
achso, nochwas: ist es sinnvoll SSL an dieser Stelle einzusetzen? Im Prinzip sinds keine geheimen Daten die gesendet werden und man wird diese über eine Website sowieso abrufen können.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben