# Frage zur Sicherheit von Konfigurationsdatei



## NeoAnderson1982 (17. Aug 2009)

Hi!

Ich möchte gerade mit einem neuen Projekt starten und da ich Programme gerne Plattform-übergreifend schreibe, möchte ich Java verwenden.
Jetzt habe ich allerdings eine kleine Frage, bevor es losgeht.
Das Projekt wird auf eine Datenbank eines Webservers zugreifen (MySQL). Wie ich dazu eine Verbindung herstelle, weiß ich und ist ja auch überall gut dokumentiert. Meine Frage dreht sich da eher um die Sicherheit, vor allem für die Datenbank.
Das Programm kann von jedem Menschen im Netz heruntergeladen werden.
Meine Frage ist nun, wie kann ich die Konfigurationsdaten, also Datenbankname, Benutzername und -passwort so sichern, dass die Nutzer die Daten nicht auslesen können?
Denn wenn ich das bisher richtig gesehen habe, gibt es ja eigentlich keine Möglichkeit, den Programmcode vor einer Analyse durch Dritte zu schützen, oder?

Mit bestem Dank
Aljoscha Peters


----------



## sparrow (17. Aug 2009)

Eine hundertprozentige Sicherheit gibt es nicht, egal in welcher Programmiersprache.
Wenn du die Zugangsdaten heraus gibst musst du damit rechnen, dass sie jemand findet. Das würde auch für C-Programme gelten, denn wenn dir eine ELF oder EXE-Datei anschaust wirst du sehen, dass auch darin die Zeichenketten aus dem Programm durchaus noch lesbar sind.

Eine Möglichkeit wäre es die Daten nachträglich nachzuladen, also z.B. bei dem Server anzufragen der auch die Datenbank beherbergt und entsprechend die Daten so zu übertragen. Aber auch das kann man heraus bekommen und entsprechend selbst nachfragen.

Eine weitere Möglichkeit: Java kommuniziert mit PHP auf dem Webspace und ausschließlich PHP greift auf die Datenbank zu.


----------



## tuxedo (19. Aug 2009)

NeoAnderson1982 hat gesagt.:


> Hi!
> Meine Frage ist nun, wie kann ich die Konfigurationsdaten, also Datenbankname, Benutzername und -passwort so sichern, dass die Nutzer die Daten nicht auslesen können?



Wie sparrow schrieb: Gar nicht.

Wer auf etwas zugreifen will muss zwangsweise wissen WIE er das macht. Und es ist in Java, sowie in anderen Sprachen auch kein Hexenwerk vordefinierte Zugangsdaten auszulesen.

Ergo: Zugangsdaten nicht mitliefern, sondern vom Anwender eingeben lassen. Klar, nicht immer macht das in Anwendungsfall Sinn. Aber entweder der Server vertraut allem was ankommt, oder der Server vertraut nur bekannten Usern. Für eins von beidem musst du dich entscheiden.

- Alex


----------



## gizmo (19. Aug 2009)

Eine andere Möglichkeit wäre es, den Client nicht direkt mit der DB kommunizieren zu lassen, sondern über Webservices o.ä., welche die Funktion bereitstellen und auf der DB arbeiten.

Damit ist es dem Client nicht mehr möglich beliebige Kommandos auf der DB auszuführen.

Andernfalls kannst du wie schon erwähnt verschiedene Nutzer in der DB anlegen.

Meiner Erfahrung nach wird normalerweise die Variante mit Services genutzt. Security ist dann z.B. auch über die Konzepte von EJB möglich.


----------



## tuxedo (19. Aug 2009)

Wobei da auch wieder das "dem Client vertrauen" greift. Aber klar, das ist dann weniger kritisch.

DIREKT würde ich einen Client nie mit der DB sprechen lassen. Außer jeder Client bringt seine eigene Embedded DB mit 

- Alex


----------

