Sicherheit in Javaprogrammen

Status
Nicht offen für weitere Antworten.
C

C_A

Gast
Ich habe eine Frage, die deutlich zeigt, dass ich in Java noch neu bin ;-)

Wenn ich - früher - mit Delphi ein Prog geschrieben habe, ist am Ende eine ausführbare Exe-Datei rausgekommen.

Wenn ich heute mit Java ein Prog weitergeben möchte, kann ich nur ein jar-File weitergeben. Dieses Jar-File lässt sich problemlos "entpacken" - und dann finde ich sämtliche Klassen, die dazugehören: main.class, gui.class etc.

Kann denn jeder, der mein prog in die Finger bekommt, die einzelnen Klassen extrahieren und deren Funktionalität nutzen?

Meine Frage hat den Hintergrund, dass ich eine Klasse DB.class habe, wo die Abfragen an eine Datenbank liegen. Dort sind auch die Zugangsdaten hart codiert. Muss ich jetzt damit rechnen, dass jeder, der die DB.class hat, auch auf die DB zugreifen kann?

Könnt Ihr mir Seiten empfehlen, die sich mit dem Thema "Sicherheit in Java-Programmen" beschäftigen?

Oder: wie löst Ihr das Problem mit Datenbankpasswörtern?
 
M

maki

Gast
Das hast du richtig verstanden, Stichwort Decompiler, aber die Strings für die Db Zugangsdaten stehen auch schon im Bytecode... ist aber nciht nur ein Java Problem, auch bei Delphi ist der Aufwand niedrig sich die Daten zu holen.

Wenn du wenige User hast, könntest du ja jedem User einen DB Nutzer zuordnen, die Zugangsdaten hat dann nur der jeweilige User, sie stehen nicht im Programm.

Ansonsten kann man einen Server nutzen, die alleine die Zugangsdaten zur DB kennt und auch alleine auf die DB zugreift, deine User verbinden sich per Client zum Server, dann brauchst deine SW eine eigene Benutzerverwaltung.
 

mmz

Aktives Mitglied
Hi,

wie schon gesagt wurde kann jeder an die Zugangsdaten kommen. Da spielt es keine Rolle in welcher Sprache das Programm geschrieben wurde.

Wenn Du die Umsetzung der Client-Server Lösung ( welche natürlich eine der Besten Lösungen darstellt ) nicht umsetzen kannst oder willst, zwei Vorschläge von mir :

- Frage den Benutzer in einem Dialog nach den Zugangsdaten. Dann müssen diese nicht fest im Code stehen.
- Speichere die Zugangsdaten in einer verschlüsselten Datei ( welche Du dann mit auslieferst ) und wenn sie gebraucht werden dann entschlüssele diese Daten wieder aus der Datei.​

Im ersten Fall haben nur die Benutzer die Zugangsdaten und du musst nicht jedem ein Account zuweisen, allerdings wenn einer die Daten herausgibt...Kann man sich denken.

Im zweiten Fall wissen die Benutzer die Daten nicht ( brauchen sie ja auch nicht ), aber trotzdem kann man das Verfahren zur Ver- und Entschlüsselung im decompilierten Quelltext nachvollziehen bzw. wenn keine verschlüsselte Verbindung genutzt wird ( wiederum relativ viel Aufwand ) einfach mitsniffen.

Fazit: Im Quelltext sollten überhaupt keine Zugangsdaten stehen. Alle anderen Lösungen
erhöhen nur den Aufwand für jemanden der diese Daten haben möchte, halten ihn aber nicht davon ab diese auch zu bekommen. Am sichersten ist immer noch die Client-Server Lösung, da die Daten nur auf deinem Server liegen und sie kein Anderer ausser Dir kennen sollte.
 

faetzminator

Gesperrter Benutzer
Auch wenn man nicht an die Zugangsdaten kommt, spätestens mit MITM kann man als User alles, was die Schnittstelle zur Verfügung stellt.
 
C

C_A

Gast
Danke für Eure Einschätzungen!

wie schon gesagt wurde kann jeder an die Zugangsdaten kommen. Da spielt es keine Rolle in welcher Sprache das Programm geschrieben wurde.
Ist nachvollziehbar.

Bei mir in erster Linie die Überraschung da, dass meine Klassen in - prinzipiell - jedem Kontext verwendet werden können. Um von den Zugangsdaten mal wegzukommen: wenn ich einen supertollen Algo schreibe, mit dem Pi innerhalb von einer Minute bis auf die letzte Dezimalstelle* berechnet wird, kann ja jeder die Klasse rausfischen und für seine eigenen Programme verwenden. Im Moment stehe ich noch am Anfang und schreibe eher triviale Programme. Aber für später mal dürfte die Frage schon relevanter werden.

* naja, oder so ähnlich .... Pi und PC | Wanderngehen ...
 

The_S

Top Contributor
Bei mir in erster Linie die Überraschung da, dass meine Klassen in - prinzipiell - jedem Kontext verwendet werden können. Um von den Zugangsdaten mal wegzukommen: wenn ich einen supertollen Algo schreibe, mit dem Pi innerhalb von einer Minute bis auf die letzte Dezimalstelle* berechnet wird, kann ja jeder die Klasse rausfischen und für seine eigenen Programme verwenden. Im Moment stehe ich noch am Anfang und schreibe eher triviale Programme. Aber für später mal dürfte die Frage schon relevanter werden.

* naja, oder so ähnlich .... Pi und PC | Wanderngehen ...

Du kannst mit einen Obfuscator deinen Code nach dem decompilieren unkenntlich machen. Das schützt schon mal ein wenig. Aber genauso wie bei einer exe-Datei oder sonstigem Source gilt: Wenn jemand wirklich an deinen Code kommen/nutzen möchte, dann schaff er das auch irgendwie! Aber ehrlich gesagt sind die wenigsten Programme wohl Schützenswert. Und falls sie doch so unglaublich gut sein sollten, dann kann man damit auch unmengen an Geld verdienen, was es ermöglicht, die "tollen" Codestellen auf einen Server auszulagern. Darüber würde ich mir an deiner Stelle erst mal lange keine Gedanken machen (es sei denn dein Code ist so schrecklich, dass du nicht möchtest, dass ihn jemand lesen kann :D ).
 
B

bygones

Gast
Danke für Eure Einschätzungen!


Ist nachvollziehbar.

Bei mir in erster Linie die Überraschung da, dass meine Klassen in - prinzipiell - jedem Kontext verwendet werden können. Um von den Zugangsdaten mal wegzukommen: wenn ich einen supertollen Algo schreibe, mit dem Pi innerhalb von einer Minute bis auf die letzte Dezimalstelle* berechnet wird, kann ja jeder die Klasse rausfischen und für seine eigenen Programme verwenden. Im Moment stehe ich noch am Anfang und schreibe eher triviale Programme. Aber für später mal dürfte die Frage schon relevanter werden.

* naja, oder so ähnlich .... Pi und PC | Wanderngehen ...

wenn du den ultimativen algorithmus entwickelt hast um die Weltformel zu erforschen waere mein erster Schritt ein Softwarepatent...

und stell dir vor... es soll auch illegale Windows versionen herumgeistern...
 
Zuletzt bearbeitet von einem Moderator:

Painii

Bekanntes Mitglied
kann ja jeder die Klasse rausfischen und für seine eigenen Programme verwenden. Im Moment stehe ich noch am Anfang und schreibe eher triviale Programme. Aber für später mal dürfte die Frage schon relevanter werden.

Da kannst du nicht viel dagegen machen (wie gesagt, wenn einer will, schafft er es auch).
Du kannst eine Lizenz ausgeben die sagt was einer machen darf und was nicht.
Wenn er diese von dir ausgegebenen Richtlinien nicht einhält kannst du ihn danach verklagen (wenn dein Programm dann mal so wertvoll ist dass es sich lohnt).

Ich mein so funktioniert doch alles in der Wirtschaft - man kann klauen, wenn man erwischt wird wird man bestraft. Wenn nicht dann trägt man eben noch das Risiko.
Oder man bezahlt für das was man nutzt, und hat dann wenigstens das Gefühl ein guter Mensch zu sein.

edit: Lizenz, Patent, whatever... denke mein grundlegender Gedanke ist davon unabhängig wie man es nun bezeichnet.
 

newcron

Aktives Mitglied
Wenn du deine Anwendung frei verfügbar machen möchtest, sie allerdings gleichzeitig auf eine DB zugreifen soll, ist die, meiner Meinung nach, sicherste Lösung eine Zwischenschicht zwischen Anwendung und DB zu packen (Stichwort REST Webservice).

Das ganze würde dann so aussehen, dass du auf deinem Server eine Datenbank hast, zu der sich allerdings niemand von außen verbinden kann. Zusätzlich hast du noch deine Webservices (in PHP, J2EE, ASP,...), die aus dem Internet via HTTP Aufrufbar sind.
Dieses Webservice stellt methoden wie "listAllItems", "addComment",... zur verfügung. Abhängig von dem, was du benötigst.

Deine Anwendung kommuniziert nur noch mit dem Webservice. Will der Benutzer nun alle seine Daten ansehen, verbindet sich das Programm nun zu dem Webservice (hier könntest du ein Account-System einführen). Das Webservice kennt das Datenbankpasswort, holt die Daten aus der DB und schickt sie dem Programm zurück.
Auch wenn der Benutzer deinen Code dekompiliert kann er nicht mehr an die Datenbank ran. Er könnte höchstens seine eigenen Zugangsdaten "klauen", nur die kennt er sowieso.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben