Erste Schritte Datenbank Zugangsdaten sicher?

lorem

Mitglied
Hallo liebe Forengemeinde,

ich bin im Javabereich noch ganz frisch und in den Anfängen - Ich muss aber sagen, es gefällt mir wesentlich besser als C++ :)

Ich habe mir eine kleine Klasse gebastelt, mit der ich auf eine MySQL Datenbank zugreifen kann. Der Zugriff funktioniert einwandfrei und mein kleines Loginscript funktioniert auch schon :toll:

Nun ist mir jedoch eine Frage aufgekommen: Ich habe in Netbeans die MySQL Connectors (so eine kompilierte .jar-Datei) eingebaut und konnte diese auch irgendwie anschauen.
Angenommen ich programmiere eine Software, welche ich verkaufen oder weitergeben möchte und dort stehen die MySQL Zugangsdaten drin; Ist es möglich, diese Daten auszulesen? Dies sollte ja nach Möglichkeit nicht unbedingt möglich sein..

Kurz: Sind die Zugangsdaten im Skript sicher (sind statische Variablen meiner MySQL Klasse)? Wie sollte man diese am besten speichern bzw. damit umgehen?

Gibt es in Java irgendwie einen Decompiler für die .jar Dateien?

Viele Grüße
Olli
 
Zuletzt bearbeitet:

Spin

Top Contributor
Java:
Kurz: Sind die Zugangsdaten im Skript sicher (sind statische Variablen meiner MySQL Klasse)? Wie sollte man diese am besten speichern bzw. damit umgehen?

Ich habe noch nie ein Java "Script" geschrieben. :eek:
Mit Java kann man nicht scripten sondern nur objekt orientiert arbeiten. Naja mag sein das prozedurale Sachen in Java als Script bezeichnet werden, aber lassen wir das einfach mal im Raum stehen. Ein Script ist für mich etwas anderes und würde ich eher mit .js files in Verbindung bringen.

@Thema
Natürlich kann man die Daten sicher machen. Dazu gibt es jede Menge Frameworks oder du baust dir ein paar eigene Klassen. Eine Config oder du benutzt die Klasse Properties und lädst die unabhängig von deinem Produkt.

Auf jeden fall niemals hardcoded in dein Java code.!!!!!!!!

Hier was du alles nicht falsch machen solltest:
Coding Horror: Top 25 Most Dangerous Programming Mistakes

Oder du benutzt einfach Preferences :

Java:
import java.util.prefs.Preferences;

public class MyApplication {
  Preferences preferences = 
      Preferences.userNodeForPackage(MyApplication .class);

  public void setCredentials(String username, String password) {
    preferences.put("db_username", username);
    preferences.put("db_password", password);
  }

  public String getUsername() {
    return preferences.get("db_username", null);
  }

  public String getPassword() {
    return preferences.get("db_password", null);
  }

  // your code here
}

Das gnaze verwendet entsprechen XML files.
grüße spin
 
M

Marcinek

Gast
Ich würde mal danach googeln oder zunächst die SUFU nutzen.

Exakt dieses Thema wurde bereits bis zum Ermüden diskutiert.
 

lorem

Mitglied
Hi Spin,

vielen Dank für deine Antwort. Dann verwende ich statt "Skript" das nächste mal lieber "Code" ;)

:rtfm:
Skriptdatei, enthält in der EDV interpretierbare Befehle einer Skriptsprache

Edit: Ja okay.. Skriptsprache != Java.. :oops:

Also die Klasse Preferences würde auf Basis der XML Dateien eine Sichere Möglichkeit bieten, um die Daten zu speichern? Die Daten würden ja im Endeffekt einmal bei mir wärend der Entwicklung eingetragen werden.

Vielen Dank schon mal für deine Antwort!
 
Zuletzt bearbeitet:

Spin

Top Contributor
Hier aus google:

Correct Case: Using a multi-tier architecture

The correct way to do it is to have a middle layer, in between your database server and your client application, that authenticates individual users and allows a limited set of operations to be performed. Each user would have their own login credentials, but not for the database server. The credentials would allow access to the middle layer (the business logic tier) and would be different for each user.

Every user would have their own username and password, which could be stored locally in a preferences file without any security risk. This is called a three-tier architecture (the tiers being your database server, business logic server, and client application). It is more complex, but it really is the most secure way to do this sort of thing.

The basic order of operations is:

Client authenticates with business logic tier using the user's personal username/password. The username and password are known to the user and are not related to the database login credentials in any way.
If authentication succeeds, the client makes a request to the business logic tier asking for some information from the database. For example, an inventory of products. Note that the client's request is not a SQL query; it is a remote procedure call such as getInventoryList.
The business logic tier connects to the database and retrieves the requested information. The business logic tier is in charge of forming a secure SQL query based on the user's request. Any parameters to the SQL query should be sanitized to prevent SQL injection attacks.
The business logic tier sends the inventory list back to the client application.
The client displays the inventory list to the user.

Note that in the entire process, the client application never connects directly to the database. The business logic tier receives a request from an authenticated user, processes the client's request for an inventory list, and only then executes a SQL query.

So mache ich es in PHP ... aber in Java habe ich schon lange keine großen Projekte mehr realisieret ;) See quote best approach :p
 

lorem

Mitglied
Ja genau, das mit den lokalen Konfigurationsdateien kommt mir auch bekannt vor. :)

Im Endeffekt frage ich mich nur: Wenn eine Java Software auf eine zentrale Datenbank zugreifen soll, wäre es ja doof, die im Klartext zu speichern - ist ja schließlich meine Datenbank :D

Ich werde aber noch einmal im Forum stöbern und bei Google etwas suchen.

Besten Dank!
 

tfa

Top Contributor
Also die Klasse Preferences würde auf Basis der XML Dateien eine Sichere Möglichkeit bieten, um die Daten zu speichern?
Nein. Das ist sogar noch unsicherer als das Passwort direkt in den Quellcode zu schreiben. Eine 2-Schicht-Anwendung (also CLient verbindet sich direkt mit DB) bekommst du so nicht sicher. Du brauchst eine Server-Schicht, die den Zugriff auf die DB kapselt.
 

lorem

Mitglied
Hi,

ja - steht ja so im Prinzip auch in dem "Google Zitat". Nur ist dies auch wieder ein eher unbekannter Bereich. Ich könnte natürlich einen Webservice in PHP Programmieren und dann auf diesen zugreifen.

Dann müsste man natürlich bei der Übermittlung von Benutzernamen/Passwörtern an den Webservice auf die entsprechende Verschlüsselung achten.
Außerdem gab es ja bei (ich glaube) ICQ einen Bug, der bei der Übermittlung der Daten an den Server nicht überprüft hat, ob es wirklich der ICQ Server ist. Ansonsten ändert irgend jemand seine lokalen Host Konfigurationen und mein Request geht ins Nirvana :)

Ist mit der Schnittstelle, die vor der Datenbank liegt eher sowas wie ein Webservice oder eher sowas wie eine P2P Anwendung / Server gedacht?
 

irgendjemand

Top Contributor
wie hier bereits erwähnt : zugangs-daten *gleich welcher art* dierekt im client zu nem server es "entwicklers" können NIE 100% gesichert werden ... es gibt immer möglichkeiten da ran zu kommen ...

aber wie bereits ebenfalls gesagt wurde dies hier schon mehr als breit und darüber hinaus erörtert ...

fakt : wenn deine software bei nem kunden laufen soll ... aber auf deine datenbank zu greift ... dann hast du einen schweren konzept fehler drin und solltest die software von grund auf neu planen ...
 

lorem

Mitglied
Hi,

ehrlich gesagt habe ich noch gar kein Konzept aufgestellt, da ich erst einmal die Sprache vernünftig lernen möchte, bevor ich eine Software vermarkte und im Punkte Sicherheit einen Überblick bekommen möchte/muss.

Mein Gedankengang war zunächst folgender: Der Kunde kann sich "einen eigenen Server" mieten, was bei mir zur Folge hat, dass ich eine Datenbank mit dem entsprechenden Benutzer anlege und dem Kunden dann die Software aushändige. Natürlich werden in "meiner" Datenbank nicht Daten für jeden Benutzer erstellt, sondern für einen Kunden, der dann wiederum x Benutzer angelegen kann, die aber auf meinen Servern liegen. Es geht im Prinzip um eine Möglichkeit, global Daten zu speichern. Ob da nun evtl. eine Server/Client Anwendung besser geeignet ist, muss ich dann noch entscheiden ;)
Weiteres habe ich noch nicht geplant, da mir hierfür aktuell noch die Routine und Erfahrung fehlt.
 
Zuletzt bearbeitet:

irgendjemand

Top Contributor
für sowas würde sich entweder ein webservice und ein umfangreiches backend oder eine selbstgeschriebene server-software besser machen als dierekte verbindung zur datenbank ...

sitze gerade an nem ähnlichen projekt von jemanden der auch ungefähr deinen wissenstand hat ... hat mich nach meiner langjährigen erfahrung *ich glaube 7 oder 8 jahre* nach hilfe gefragt und ob ichs mir mal anschauen könnte ... beim drübergucken wusste ich nicht mehr ob ich lachen oder weinen sollte ...

was ich damit ausdrücken will : es wird als "beginner" in java schon schwer etwas halbwegs vernünftiges auf die beine zu stellen ...
und wenn das ganze dann noch irgendwie "sicher" sein soll ... und dann noch übers netz geht ... da braucht man schon jahre an erfahrung auf allen betroffenen gebieten um da halbwegs was hinzubekommen ... ansonsten endet das eher in einem größeren schaden für dich als das was du damit "verdienen" würdest ... denn es reicht nur ein potentieller angreifer aus um eine solche struktur vollkommen zu übernehmen *in punkto sicherheit immer vom worst-case ausgehen*
 

lorem

Mitglied
für sowas würde sich entweder ein webservice und ein umfangreiches backend oder eine selbstgeschriebene server-software besser machen als dierekte verbindung zur datenbank ...

sitze gerade an nem ähnlichen projekt von jemanden der auch ungefähr deinen wissenstand hat ... hat mich nach meiner langjährigen erfahrung *ich glaube 7 oder 8 jahre* nach hilfe gefragt und ob ichs mir mal anschauen könnte ... beim drübergucken wusste ich nicht mehr ob ich lachen oder weinen sollte ...

was ich damit ausdrücken will : es wird als "beginner" in java schon schwer etwas halbwegs vernünftiges auf die beine zu stellen ...
und wenn das ganze dann noch irgendwie "sicher" sein soll ... und dann noch übers netz geht ... da braucht man schon jahre an erfahrung auf allen betroffenen gebieten um da halbwegs was hinzubekommen ... ansonsten endet das eher in einem größeren schaden für dich als das was du damit "verdienen" würdest ... denn es reicht nur ein potentieller angreifer aus um eine solche struktur vollkommen zu übernehmen *in punkto sicherheit immer vom worst-case ausgehen*

Da stimme ich dir zu ;)
Ich selbst bin Umsteiger von PHP, habe da ja auch immer viel mit Sicherheit zu tun. Bevor ich eine wirkliche Anwendung schreibe, werde ich auf jeden Fall viele Testprojekte programmieren.
Aber irgendwas muss ich ja machen, um Erfahrung in Sicherheit zu bekommen ;)

Besten Dank für die Infos!
 

irgendjemand

Top Contributor
da du aus dem PHP umfeld kommst sollte dir diese seite etwas sagen : PHP: SQL Injection - Manual *vor allem der kleine "comic" ...
das ist so eines der größten probleme die viele überhaupt nicht beachten und die meisten angrifer ausnutzen ...

auch lassen sich in java verbindung zwischen verschiedenen software-teilen *z.b. Server/Client architektur* deutlich besser durch verschlüsselungen schützen ... zu mal auch die gängigen dinge wie AES und RSA bereits in java implementiert sind ...

es gibt viel was man unter sicherheit verstehen kann ...

auch wäre zum beispiel das bei java sehr einfache "decompiling" zu beachten ... mit dem jeder den source eines anderen einsehen kann wenn dieser nicht gegen sowas geschützt wird ... *man kann es nicht verhindern ... aber man kann dafür sorgen das was der "angreifer" zu sehen bekommt keinen sinn ergibt und höchst schwer zu verstehen ist*

auch kommt es immer auf das projekt an welchen "grad" an sicherheit man erfüllen sollte / will / muss ...
 

lorem

Mitglied
Hehe klar - SQL Injection und der Comic gehört ja zur PHP Entwicklung irgendwie dazu :)

Dann nimmt Java ja ganz andere Schwierigkeitsgrade bzw. Schwerpunkte als z.B. C++ an - sehr Interessant.
Jeder kann also im Endeffekt mit Grundkenntnissen keine Quelltexte lesen und wenn ich Dinge wie z.B. die Validierung eines Logins auf ein externes Programm (z.B. Server) ausgelagert habe, ist dies natürlich für den Angreifer nicht sofort ersichtlich - logisch.
 
V

vanny

Gast
Ich würde dir nen server empfehlen, der sämtliche sensitiven interaktionen vonimmt.
Das geht bei der anmeldung los.
Du schickst dem server Benutzer und Passwort und der sagt Joa oder nööneinnicht.
Selbst wenn ein Angreifer diese Prozedur decompilierender Weise enträtzelt, kann er nur probieren und wird wohl sehr sehr oft nöö zurückbekommen.
Mehr muss man nicht dazu sagen.

Gruß Vanny
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Zugangsdaten für Datenbank in Java-Programm speichern? Java Basics - Anfänger-Themen 5
I Erste Schritte Einfache Datenbank-Webseite erstellen als Nicht-IT-lerin Java Basics - Anfänger-Themen 24
M Daten aus errechneter Methode in Datenbank(SQLite) schreiben Java Basics - Anfänger-Themen 60
S Best Practice Fragen zu Projektstruktur einer Datenbank-Abfrage-App (MVC) Java Basics - Anfänger-Themen 13
I Element n aus Datenbank Query (JPA / Hibernate) Java Basics - Anfänger-Themen 3
I Passwort in Datenbank speichern um später wieder auszulesen Java Basics - Anfänger-Themen 5
S OOP Java Eingabe in verschiedene Datenbank Tabellen eintragen Java Basics - Anfänger-Themen 7
I H2 Datenbank starten / Daten in File speichern Java Basics - Anfänger-Themen 25
E schneller von der Datenbank abfragen Java Basics - Anfänger-Themen 15
E Datenbank Spalte zusammenzählen Java Basics - Anfänger-Themen 2
R Datenbank Java Basics - Anfänger-Themen 1
I API Key´s in der Datenbank decrypt / encrypten? Java Basics - Anfänger-Themen 23
I Werte (u.a. Geldbeträge) in Datenbank speichern und Rundungen? Java Basics - Anfänger-Themen 8
M Mehrere Datenbank zugriffe über tomee.xml regeln? Java Basics - Anfänger-Themen 1
M Datenbank oder Textdatei? Java Basics - Anfänger-Themen 4
S Datenbank Befehl nach Login Java Basics - Anfänger-Themen 5
S Datenbank Tabelle eine Zeile an einer bestimmten Stelle einfügen Java Basics - Anfänger-Themen 2
M Von der Datenbank zum Textfield Java Basics - Anfänger-Themen 16
R Best Practice Logik in der Datenbank oder in Java? Java Basics - Anfänger-Themen 3
R Datenbank-Werte dynamisch ausgeben Java Basics - Anfänger-Themen 19
B Frage zu Datenbank Design - Rechnungen, Angebote... und deren Positionen Java Basics - Anfänger-Themen 4
B Datenbank: Entity mit vielen Referenzen? Ansatz so ok? Java Basics - Anfänger-Themen 8
T Datenbank | Welche am Sinnvollsten? Java Basics - Anfänger-Themen 5
S Daten speichern, ohne Datenbank Java Basics - Anfänger-Themen 8
L Daten aus ArrayList in Datenbank durchsuchen Java Basics - Anfänger-Themen 5
M Datenbank in jTable Laden Java Basics - Anfänger-Themen 49
M Datenbank verbindung Java Basics - Anfänger-Themen 19
J Java Verbindung mit mysql Datenbank Java Basics - Anfänger-Themen 3
B Datenbank, aktuelle Ende als Zahl an Label übergeben Java Basics - Anfänger-Themen 7
T Collections Geeignete Collection/Liste/Datenbank Java Basics - Anfänger-Themen 17
B Treetable (rekursive Funktion) aufbauen von Datenbank Java Basics - Anfänger-Themen 4
R Input/Output Verbindung mit mySql-Datenbank Java Basics - Anfänger-Themen 9
D Compiler-Fehler Wert auf Datenbank übertragen und Sleep Thread Java Basics - Anfänger-Themen 3
N (Java) Regristrierung und Login System mit einer Datenbank Java Basics - Anfänger-Themen 5
J Datenbank Zugriff Java Basics - Anfänger-Themen 24
J Mit JSF Formular in Datenbank schreiben Java Basics - Anfänger-Themen 3
DaCrazyJavaExpert Verschiede Aktionen der Datenbank getrennt durchführen Java Basics - Anfänger-Themen 4
DaCrazyJavaExpert Datenbank wird nicht erstellt Java Basics - Anfänger-Themen 31
E Daten gehen nicht in Datenbank Java Basics - Anfänger-Themen 14
C JTable update mit MySQL Datenbank Java Basics - Anfänger-Themen 1
Meeresgott OOP Gui, Logik und Datenbank richtig aufbauen Java Basics - Anfänger-Themen 43
B Schreiben von zu vielen Einträgen in einer Datenbank Java Basics - Anfänger-Themen 9
S Datenbank auf Knopfdruck abfragen Java Basics - Anfänger-Themen 8
M Java als Webanwendung mit Datenbank abfrage Java Basics - Anfänger-Themen 3
N Datenbank mit GUI verbinden - Wie? Java Basics - Anfänger-Themen 5
1 Datenbank in Java Java Basics - Anfänger-Themen 1
M Erste Schritte Java Applet - HTML Seiten auslesen und in Access Datenbank schreiben? Java Basics - Anfänger-Themen 15
J Bücher Datenbank Java Basics - Anfänger-Themen 5
S Best Practice MVC und große Datenmengen aus einer mySQL - Datenbank Java Basics - Anfänger-Themen 24
J Datum und Uhrzeit in Datenbank falsch hinterlegt Java Basics - Anfänger-Themen 13
R Erstversuch Datenbank Java Basics - Anfänger-Themen 6
I Daten speichern ohne Datenbank Java Basics - Anfänger-Themen 20
A Erste Schritte Verbindung zu MySQL Datenbank herstellen Java Basics - Anfänger-Themen 7
T Sql Datenbank - variable übergeben? Java Basics - Anfänger-Themen 8
C Passwörter möglichst sicher in Datenbank speichern Java Basics - Anfänger-Themen 18
W Erste Schritte Exceltabelle in Datenbank übertragen mittels XDEV Java Basics - Anfänger-Themen 7
J GUI mit phpMyAdmin Datenbank verbinden Java Basics - Anfänger-Themen 0
K Erste Schritte Datenbank SQL erklärung Java Basics - Anfänger-Themen 15
B Lokale Datenbank Java Java Basics - Anfänger-Themen 2
B Klassen Doppelte werte Filtern XML, Datenbank und DOM Java Basics - Anfänger-Themen 3
Todesbote Int Array mit Hibernate in Datenbank speichern. Java Basics - Anfänger-Themen 2
U Datenbank in Java Java Basics - Anfänger-Themen 8
M Keine Datenbank verbindung Java Basics - Anfänger-Themen 14
N mit Werten aus einer mysql datenbank in java rechnen Java Basics - Anfänger-Themen 17
Q Datenbank nicht über separaten Server Java Basics - Anfänger-Themen 4
B Dateiname in Datenbank schreiben Java Basics - Anfänger-Themen 2
J fortlaufende Objekte durch Variable auswählen; Datenbank Java Basics - Anfänger-Themen 4
S ArrayList in mysql Datenbank speichern Java Basics - Anfänger-Themen 6
C Datenbank - Welche Java Basics - Anfänger-Themen 5
B Java Objektorientierte Datenbank - Assoziation Hilfe Java Basics - Anfänger-Themen 4
G Input/Output Serialisierung oder Datenbank Java Basics - Anfänger-Themen 6
J Erste Schritte Objekte in Datenbank speichern Java Basics - Anfänger-Themen 26
A Android Datenbank gaaanz einfaches Insert geht nicht - warum? Java Basics - Anfänger-Themen 4
S Input/Output Primzahlen Datenbank Java Basics - Anfänger-Themen 11
B Mit Java-Programm Daten aus MySQL-Datenbank auslesen, lokal und nicht lokal. Java Basics - Anfänger-Themen 10
K Input/Output Datenbank Java Basics - Anfänger-Themen 27
M Datenbank in die Gui Java Basics - Anfänger-Themen 4
J JTable mit Daten aus Datenbank füllen Java Basics - Anfänger-Themen 3
F Erfassung von PCs in eine SQLite-Datenbank über JDBC Java Basics - Anfänger-Themen 9
T Datenbank Abfrage Exception Null Java Basics - Anfänger-Themen 2
M Brauche ich ein Datenbank oder nicht? Java Basics - Anfänger-Themen 6
D JDBC Datenbank fail?! Java Basics - Anfänger-Themen 20
A Problem beim einfügen in eine Datenbank Java Basics - Anfänger-Themen 2
F Classpath Datenbank ... nur wo? Java Basics - Anfänger-Themen 24
H Datenbank suche in kleine Schritte Java Basics - Anfänger-Themen 6
B Personalnummer aus Datenbank Java Basics - Anfänger-Themen 3
M Welche Datenbank? Java Basics - Anfänger-Themen 5
J RadioButtonInhalt in Datenbank übergeben Java Basics - Anfänger-Themen 3
R Datenbank bei Klassenverteilung führt zu NullPointerException Java Basics - Anfänger-Themen 7
J PW von Datenbank wie abspeichern? Java Basics - Anfänger-Themen 2
F Verbindung zu MySql Datenbank Java Basics - Anfänger-Themen 4
MU5T4NG JPasswordField als Hash in Datenbank abspeichern Java Basics - Anfänger-Themen 3
J Kleine Datenbank programmieren Java Basics - Anfänger-Themen 2
J Eigene kleine Datenbank programmieren Java Basics - Anfänger-Themen 2
F Collections Datenbankdaten in einer Map speichern, bearbeiten, sortieren und wieder in Datenbank schreiben Java Basics - Anfänger-Themen 20
S Schnittstelle für Datenbank bzw. Dateiformat Java Basics - Anfänger-Themen 2
C ComboBoxModel mit Daten der Datenbank verändern Java Basics - Anfänger-Themen 2
T Datenbank automatisch erzeugen beim ersten Start Java Basics - Anfänger-Themen 6
I Datenbank - nach erster Verbindung keine Verbindung mehr Java Basics - Anfänger-Themen 3
F Datenbank in eine Textdatei speichern Java Basics - Anfänger-Themen 13

Ähnliche Java Themen

Neue Themen


Oben