ich habe mal eine Frage bezüglich Datenbankzugriffe in Java. .class files können ja ohne Probleme in Klartext umgewandelt werden. Wenn ich jetzt ein Java Programm schreibe, dass auf zentrale Datenbank (also alle Programme greifen nur auf diese eine zu) zugreift, dann wäre es ja für jeden sehr leicht Zugang zu bekommen.
Ich spiele jetzt auf jdbc an: Da steht ja meistens der Benutzername und das dazugehörige PW in der class file. ZB
public static String USERNAME="testUser";
public static String PASSWORD="";
dann irgendwie so halt
ConnectionPool pool = new ConnectionPool(DRIVER, URL, USERNAME,
PASSWORD, 1, 5, true)
pool.getConnection();
...
Somit findet jeder heraus wie er Zugang bekommt. Sicherlich ich kann den User in der DB einschränken, aber ich das nur mein Programm Zugriff hat und kein anderes.
ich will zB user daten von der Datenbank auslesen, dann benötige ich aber immer noch einen db-user der sich an der datenbank anmelden kann und die daten soll der programmbenutzer ja nicht wissen/bzw. wissen müssen.
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
So macht man das ja auch nicht. Lass den User ein Passwort
eintippen.
…oder verwende z.B. eine xml-Datei, die diese Daten enthält und die dann im java-Programm nur ausgelesen werden muss. (Oder schreib’ ein Servlet mit Tomcat im Hintergrund). Aber mit genug Zeit und Spitzfindigkeit kann man jedes PW herausfinden
ich will zB user daten von der Datenbank auslesen, dann
benötige ich aber immer noch einen db-user der sich an der
datenbank anmelden kann und die daten soll der
programmbenutzer ja nicht wissen/bzw. wissen müssen.
? Du must doch irgendwo ein Passwort vom User abfragen, oder ?
Wieso benutzt du das nicht um auf die DB zuzugreifen ?
Wenn eh alle User über das Programm auf die Daten zugreifen können macht die Frage keinen Sinn. Dann ist der Schutz sinnfrei.
Wenn du die User-Passwörter in der DB speicherst: benutz gehashte Passwörter. Die kann ja dann auch jeder gefahrlos mitlesen.
? Du must doch irgendwo ein Passwort vom User abfragen, oder ?
Wieso benutzt du das nicht um auf die DB zuzugreifen ?
hehe wir reden glaub ich total aneinander vorbei:
ok nehmen wir mal folgenden sachverhalt an: es sollen irgendwo in einer db auf einem server programmeinstellungen gespeichert werden. das programm soll diese konfiguration dateien auslesen und sein verhalten dementsprechend anpassen. jetzt kann ich natürlich einen datebank user anlegen der nur leserechte hat (was ja auch genügt). das programm verbindet sich dann mit diesem db-user und holt die daten. jetzt will ich aber, dass keiner die daten auslesen kann. wenn aber einer das java programm bentutz und die class files dekompiliert erhält er zugriff auf die daten des db-user, die ich ja zwangsweise im java programm angeben muss um eine verbindung zu erzeugen.
Wenn eh alle User über das Programm auf die Daten zugreifen
können macht die Frage keinen Sinn. Dann ist der Schutz
sinnfrei.
es sollen irgendwo
in einer db auf einem server programmeinstellungen gespeichert
werden. das programm soll diese konfiguration dateien auslesen
und sein verhalten dementsprechend anpassen.
Also zentral gelagerte Informationen. Wie werden die einzelnen User auseinander gehalten (oder gelten die Einstellungen für alle) ?
jetzt kann ich
natürlich einen datebank user anlegen der nur leserechte hat
(was ja auch genügt). das programm verbindet sich dann mit
diesem db-user und holt die daten. jetzt will ich aber, dass
keiner die daten auslesen kann.
Das ist nicht möglich. Du kannst es den Leuten nur schwer machen aber du kannst die Daten nicht komplett unlesbar machen.
Man könnte (von einfach nach wirkungsvoll):
Den Passwort und User-String zur Laufzeit aus einem Char-Feld rauslesen (grosses Char[][]-Feld und 4-5 verschaltelte Schleifen die richtigen Buchstaben in der richtigen Reihenfolge ablaufen)
Das Passwort aus einer Serie von MD5/SHA-Operationen gewinnen.
Die class-Datei verschlüsselt mit einem eingenen Crypt-Loader abspeichern.
Ein CHAP (Server stellt regelmässig eine „Frage“ die nur das korrekte User-programm beantworten kann) zwischen dem Server und dem User-Programm aufbauden (am besten mit einer vom Server verschlüsselt und signiert gelieferten Kontroll-klasse, so wie es Gamespy tut)
Wenn ich solche Systeme knacken müsste würde ich einfach die JVM in den DebugModus starten. Dann lassen sich die Daten sehr einfach auslesen. Eine Sache von 5 min, selbst bei CHAP-Systemen.