DB Sicherheit in JAVA

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo zusammen!
Ich muss in der Schule eine Arbeit über Datenbank Sicherheit in JAVA schreiben. Also, welche Sicherheitslücken es bei Datenbanken allgemein gibt und wie man sie mit JAVA unter Umständen schließen kann. Ich hab google schon durchforstet aber finde irgendwie nichts...

Was ich von euch gerne hätte, ist kein fertiges Dokument, sondern eher Stichwörter oder Quellen (links oder auch Bücher) zu dem Thema.

Ich hätte einfach gerne einen Überblick über die Sicherheitsfunktionen in bezug auf Datenbanken (SQL Server, Oracle, MySQL und PostgresSQL) die JAVA bietet.

mfg
 

hupfdule

Top Contributor
Entweder habe ich dich nicht richtig verstanden oder die Aufgabenstellung ist einfach Schwachsinn. Sicherheitslücken, die in einer Datenbank vorhanden sind, lassen sich nicht durch eine Programmiersprache ausgleichen. Von daher weiß ich nicht wirklich, was mit "Sicherheitsfunktionen, die Java bietet" gemeint ist.
 

Yzebär

Bekanntes Mitglied
hupfdule hat gesagt.:
Entweder habe ich dich nicht richtig verstanden oder die Aufgabenstellung ist einfach Schwachsinn. Sicherheitslücken, die in einer Datenbank vorhanden sind, lassen sich nicht durch eine Programmiersprache ausgleichen. Von daher weiß ich nicht wirklich, was mit "Sicherheitsfunktionen, die Java bietet" gemeint ist.

Manchmal sollte man erst nachdenken, bevor man postet. Man kann sehr wohl Sicherheitslücken einer Datenbank verstecken, wenn man dem User beschränkten Zugriff auf eine Datenbank über eine Java-Applikation gewährt und damit evtl vorhandene Lücken schon schließen kann, weil ich rein programmtechnisch gar nicht zulasse, daß die Lücke ausgenutzt wird.

Sicher bietet Java keine "eingebauten Sicherheitsfunktionen", aber Möglichkeiten sich selbst welche zu basteln. Das erste, das mir zu diesem Thema einfällt wäre Kryptographie.

Guck dir doch zunächst einmal an, was es für Sicherheitslücken gibt und beschäftige dich danach damit, wie du diese mit einer Java-Applikation vor dem User verstecken kannst.
 
G

Guest

Gast
hupfdule hat gesagt.:
Entweder habe ich dich nicht richtig verstanden oder die Aufgabenstellung ist einfach Schwachsinn. Sicherheitslücken, die in einer Datenbank vorhanden sind, lassen sich nicht durch eine Programmiersprache ausgleichen. Von daher weiß ich nicht wirklich, was mit "Sicherheitsfunktionen, die Java bietet" gemeint ist.
Ein Beispiel wäre SQL-Injection http://de.wikipedia.org/wiki/SQL_Injection. Kann in Java einfach verhindert werden....

@Yzebär: Gute Idee, danke. Werde das Problem mal so angehen.
 

hupfdule

Top Contributor
Anonymous hat gesagt.:
Ein Beispiel wäre SQL-Injection http://de.wikipedia.org/wiki/SQL_Injection. Kann in Java einfach verhindert werden....

SQL-Injection ist aber keine Sicherheitslücke der Datenbank, sondern der Anwendung. Ich vermute also, dass das damit gemeint ist, wie man Datenbankanwendungen allgemein absichern kann.

Yzebär hat gesagt.:
Manchmal sollte man erst nachdenken, bevor man postet.
Du bist ja scheinbar gut drauf heute...

Man kann sehr wohl Sicherheitslücken einer Datenbank verstecken, wenn man dem User beschränkten Zugriff auf eine Datenbank über eine Java-Applikation gewährt und damit evtl vorhandene Lücken schon schließen kann, weil ich rein programmtechnisch gar nicht zulasse, daß die Lücke ausgenutzt wird.
Hmm, ich könnte mir das nur so vorstellen, dass man in der Anwendung z.B. keine SQL-Anweisungen benutzt, von denen bekannt ist, dass deren Implementierung in der DB fehlerhaft ist. Jedoch ist das nichts sprachspezifisches. Das kann man dann in jeder anderen Programmiersprache auch tun. Auch kommt mir der Fall eher etwas theoretisch vor.

Eine Beschränkung des Zugriffs auf die DB, um die Gefahr des Ausnutzens von Sicherheitslücken zu minimieren, nehme ich jedoch eher an der DB vor, indem ich dort Benutzer anlege, die nur die absolut nötigen Rechte habe. Damit erreiche ich eher das gegenteilige Ziel, nämlich, dass ich durch Funktionalität der Datenbank Sicherheitslücken der Anwendung ausgleiche.

Sicher bietet Java keine "eingebauten Sicherheitsfunktionen", aber Möglichkeiten sich selbst welche zu basteln. Das erste, das mir zu diesem Thema einfällt wäre Kryptographie.
Kryptopgraphie kann zusätzliche Sicherheit bieten. So auf Anhieb fällt mir jedoch nicht ein, wie Sicherheitslücken damit abgedeckt werden könnten.
 
G

Guest

Gast
hupfdule hat gesagt.:
SQL-Injection ist aber keine Sicherheitslücke der Datenbank, sondern der Anwendung. Ich vermute also, dass das damit gemeint ist, wie man Datenbankanwendungen allgemein absichern kann.
Ok, ich glaube das ist was der Prof will. klingt auch logischer als meine Erklärung. Danke!
Werd mal schaun was ich dazu finde.
 
G

Gast

Gast
Wobei, nicht Datenbankanwendungen allgemein, sondern schon Java-Anwendungen! Und dabei in Bezug auf die oben genannten DBs (Oracle, SQL Server, MySql, PostgresSQL)
 

Yzebär

Bekanntes Mitglied
Ich denke mal es gibt sehr wenige echte Sicherheitslücken in den Datenbanken selbst. Aber dem User zu ermöglichen beliebige Statements abzusetzen, gäbe ihm die natürlich auch die Möglichkeit einen potentiellen Bug voll auszunutzen. Da man nicht ausschließen kann, daß es einen Bug gibt (man kann ja nicht alle Statements testen, da es unendliche Möglichkeiten gibt Statements zu erstellen), kann man dies als potentielle Sicherheitslücke der Datenbank betrachten, die in der Anwendung versteckt werden muß. Das jetzt nur als Anregung, wie man sowas dem Prof. verkaufen kann...

Mit Kryptographie meinte ich folgendes. Es ist nicht ratsam sensible Daten unverschlüsselt in der Datenbank abzulegen. Zum einen kann ja die DB trotz aller Sicherheitsvorkehrungen mal gehackt werden, zum anderen werden die Daten aus der Datenbank über das Netzwerk zum User übertragen (oder umgekehrt) und könnten unterwegs abgehört werden. Zum Beispiel wenn Passwörter in der DB gespeichert sind.

Den Zugriff des User auf die DB beschränkt man am besten, wenn dieser keinen direkten Zugriff auf die DB hat und die Funktionalität meiner Applikation zum Auslesen und Speichern benutzen muß.
 
G

Guest

Gast
Yzebär hat gesagt.:
Ich denke mal es gibt sehr wenige echte Sicherheitslücken in den Datenbanken selbst. Aber dem User zu ermöglichen beliebige Statements abzusetzen, gäbe ihm die natürlich auch die Möglichkeit einen potentiellen Bug voll auszunutzen. Da man nicht ausschließen kann, daß es einen Bug gibt (man kann ja nicht alle Statements testen, da es unendliche Möglichkeiten gibt Statements zu erstellen), kann man dies als potentielle Sicherheitslücke der Datenbank betrachten, die in der Anwendung versteckt werden muß. Das jetzt nur als Anregung, wie man sowas dem Prof. verkaufen kann...
Und wie soll man das in der Anwendung verstecken? Ich meine wenn er ein beliebiges Statement absetzen kann kann ich ja eh nichts machen. Außer ihm die Rechte für verschiedene Dinge zu nehmen (was ich aber bei der DB mach...)

Yzebär hat gesagt.:
Den Zugriff des User auf die DB beschränkt man am besten, wenn dieser keinen direkten Zugriff auf die DB hat und die Funktionalität meiner Applikation zum Auslesen und Speichern benutzen muß.
OK, wenn er dann meine Funktionaltiäten benutzt, was muss ich dann noch in bezug auf Sicherheit tun? Außer vielleicht die Übertragung zu verschlüsseln?

Finden tu ich auch nichts... Bis auf SQL-Injection und Stored Procedures (beides ein Hinweis vom Prof.). Gibts da sonst noch irgendwelche Sicherheitslücken die auf Anwendungsseite und somit mit Java beseitigt werden können?

Danke für eure Hilfe!

mfg
 

Yzebär

Bekanntes Mitglied
Anonymous hat gesagt.:
Und wie soll man das in der Anwendung verstecken? Ich meine wenn er ein beliebiges Statement absetzen kann kann ich ja eh nichts machen. Außer ihm die Rechte für verschiedene Dinge zu nehmen (was ich aber bei der DB mach...)
Er soll eben kein Statement selbst eingeben können, z.B. der User sieht eine Liste mit Tabellen (die er sehen darf) und kann irgendwelche Aktionen ausführen, die der Programmierer selbst festlegt (Inhalt ansehen, Datensatz ändern etc.). Alle Statements die abgesetzt werden dürfen, stehen in deinem Sourcecode (oder in Properties, die von deiner Applikation geladen werden).

Die Applikation verwaltet die Connections zur DB, d.h. der User hat keinen direkten Zugriff zur DB und damit auch keine eigene Connection. Dadurch kann die DB nicht blockiert werden, weil jemand mit zig Connections jede Menge Traffic generiert (ähnlich einer DoS(Denial of Service)-Attacke auf einen Webserver).

Guck mal hier (stored procedures):
archive.cert.uni-stuttgart.de/archive/win-sec-ssc
cert.uni-stuttgart.de/ticker

Was mir noch einfällt... beim MS SQL Server kann man auch Shell-Kommandos (als SQL Statement: xp_commandshell oder so) ausführen, die mit den Rechten des SQL Servers ausgeführt werden (SQL injection).
 
G

Gast

Gast
@Yzebär
Ok, ich wollt wissen wie man sowas in der Anwendung versteckt, wenn dem User die Möglichkeit gegeben werden muss beliebige Statements abzusetzen. (Im nachhinein denke ich aber nicht, dass es viele Anwendungen geben wird bei denen es erforderlich ist das der User irgenwelche Statements absetzen kann)

Aber wenn ich das dann so in der Anwendung verstecke wie du geschrieben hast, was muss dann noch zwecks Sicherheit getan werden? (Außer Kryptologie, und Sicherheit der Anwendung selbst)
Ich mein SQL-Injections fallen in dem Fall ja weg, oder versteh ich da was nicht?
 

hupfdule

Top Contributor
Anonymous hat gesagt.:
Ich mein SQL-Injections fallen in dem Fall ja weg, oder versteh ich da was nicht?
Nein, SQL-Injections sind nur in diesem Fall relevant. Wer vollständige SQL-Anweisungen absetzen kann, brauch ja nix injizieren.
Aber du baust eine SQL-Anweisung zusammen. Teile davon nimmst du von den Eingaben des Benutzers. Und diese Eingaben müssen genau geprüft werden, damit keine SQL-Injection durchgeführt werden kann.
 
G

Gast

Gast
ok, stimmt, hab da irgenwie falsch gedacht... schon klar, danke
 

Yzebär

Bekanntes Mitglied
Beliebige Statements eingeben, heißt ja nicht, daß man das über ein Eingabefeld machen muß. Unser Unternehmen zB kann an Kunden SQL-Skripte (die irgendwas in der DB reparieren) verschicken und die Kunden müssen diese Skripte selbst ausführen (über Funktionalität unserer Anwendung). Dabei muß gesichert sein, daß der Kunde oder ein Dritter diese Skripte nicht verändert oder eigene Skripte einspielt.

Solche oder ähnliche Backdoors muß man sich ja immer offen halten, weil es durch Programmierfehler oder Anwenderfehler zu Problemen in der Datenbank kommt und man manuell eingreifen muß.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z Sicherheit Datenbankprogrammierung 0
Neumi5694 MS Access Sicherheit entfernen Datenbankprogrammierung 0
D MySQL Applet MYSQL Abfragen Sicherheit Datenbankprogrammierung 2
8 MySQL Kurze Frage zur Sicherheit Datenbankprogrammierung 9
N Frage zur Sicherheit von Konfigurationsdatei Datenbankprogrammierung 4
D Sicherheit für Datenbankverbindung Datenbankprogrammierung 19
S Sicherheit bei JPMDBC Datenbankprogrammierung 5
M Sicherheit bei Applet auf MySQL Datenbank Datenbankprogrammierung 4
sparrow Datenbank und Sicherheit Datenbankprogrammierung 2
Juelin Java und MySQL MariaDB - WHERE-Klausel Datenbankprogrammierung 17
P Reicht finally nicht um DB connections zu schließen in (altem) Java? Datenbankprogrammierung 4
A Java DB Server lässt sich nicht starten Datenbankprogrammierung 3
TheSkyRider MySQL Datenbankzuordnung in Verbindung mit Java Datenbankprogrammierung 7
U SQL Server mit Java verbinden Datenbankprogrammierung 5
D SQLite Datenbank in Android Studio (Java) durchsuchen Datenbankprogrammierung 3
TH260199 Java-Programm. Probleme bei der Umsetzung von einer Kontaktverwaltung. Datenbankprogrammierung 7
S Das printen der Ausgabe des Oracle-SQL-Statements in der Java-Eclipse-Konsole funktioniert nicht Datenbankprogrammierung 6
Zrebna Wie mittels Hibernate eine Join-Tabelle als eigene Java-Klasse erstellen? Datenbankprogrammierung 5
Zrebna Noobfrage: Konvertierung von SQL-Datentyp 'timestamp with time zone' in Java-Datentyp Datenbankprogrammierung 3
Zrebna Lediglich interne DB-Verbindungen (Connections) auslesen - mittels Java Datenbankprogrammierung 4
berserkerdq2 Was genau muss ich bei date eingeben, wenn ich in Java eine Spalte definiere, die date ist? Datenbankprogrammierung 1
berserkerdq2 Was kann passieren, wenn ich in java einstelle, dass der Fremdschüssel ein Attribut ist, welches selber kein Primärschlüssel ist? Datenbankprogrammierung 4
berserkerdq2 Foreign key einstellen java Datenbankprogrammierung 4
nikgo Java SQL Ausgabe in Liste o.ä. abspeichern um mit dem Ergbnis "zu arbeiten"? Datenbankprogrammierung 5
S Datenbankprogrammierung in Java unter NetBeans 12 funktioniert nicht! Datenbankprogrammierung 1
Beginner22 Zugriff auf Datenbank aus Java über mariadb Datenbankprogrammierung 3
S ODBC Treiber in Java Editor einbinden Datenbankprogrammierung 3
H Oracle Resize eines Images in Java und Rückgabe des Image als BLOB an die Oracle Datebank Datenbankprogrammierung 14
H Java Class zum komprimieren von Jpeg-Images zum Einbinden in Oracle DB - Bild als blob (in und out) Datenbankprogrammierung 23
V SQLite java.sql.SQLException: no such column: Datenbankprogrammierung 18
B Wie kopieren ich eine Spalte von einer Tabelle in eine andere Tabelle SQLite durch java code? Datenbankprogrammierung 26
D Daten aus der Firebase-Echtzeitdatenbank abfragen und in Variablen speichern (JAVA) Datenbankprogrammierung 0
Slaylen Java List Suchen mit eigenem Generischen Datentyp Datenbankprogrammierung 10
N java sql abfrage bestimmer Datumszeitraum Datenbankprogrammierung 9
D SQL Server Android App: 'int java.lang.String.length()' on a null object reference Datenbankprogrammierung 15
P USER Management in SQL übergreifend auf JAVA Programm Datenbankprogrammierung 1
H MySQL Verbindung Datenbank und Eclipse (Java) Datenbankprogrammierung 5
N Java Abfrage über GUI, Daten hinzufügen Datenbankprogrammierung 54
N Java, sql, jar, JDBC-Treiber in Classpath Datenbankprogrammierung 8
N java SQL JAR - Probleme Datenbankprogrammierung 18
N SQL Datenbank Spalte in Java Array Datenbankprogrammierung 2
N SQL-Statement Java Variable in SQL DB einfügen Datenbankprogrammierung 1
S Verbindung von einer Excel Datei zu Java Datenbankprogrammierung 2
H suche eine Login system Bibliothek für Java Datenbankprogrammierung 5
T Java Spiel Daten speichern Datenbankprogrammierung 1
C Java MySQL check if value exists in database Datenbankprogrammierung 2
N Sqlite DB mit Java wird auf Linuxsystem nicht gefunden Datenbankprogrammierung 9
L Mybatis Datenbankabfragen in Java Datenbankprogrammierung 1
H MariaDB-Zugriff mittels Java SE Datenbankprogrammierung 3
J Java fügt Datensätze ein aber diese werden nicht richtig abgefragt Datenbankprogrammierung 3
S Datenbank MySQL und Java Datenbankprogrammierung 8
S Beispiel-Blockchain + GUI mit Java erstellen Datenbankprogrammierung 0
P Adressadministration mit Java und mySQL Datenbankprogrammierung 14
Trèfle SQLite SQL-Java Änderungen ausgeben Datenbankprogrammierung 1
Dimax MySQL Maximale Datenlänge für eine Spalte einer Datenbank in java ermitteln Datenbankprogrammierung 15
A MySQL Select und Insert in Java Datenbankprogrammierung 15
C Derby/JavaDB Auf Variable aus Link in java server page zugreifen Datenbankprogrammierung 4
platofan23 MySQL Java Programm findet Treiber für mySQL auf Debian-Server nicht? Datenbankprogrammierung 11
F MySQL Einfügen von Datensätzen über Java Datenbankprogrammierung 8
B CSV in Java einbinden und Rechnung Datenbankprogrammierung 7
L Speicherverbrauch Java Anwendung mit einer Datenbankanbindung Datenbankprogrammierung 19
X MySQL Java hat keinen Zugriff auf MySQL Datenbankprogrammierung 9
L Java- Zähle alle Werte aus der Tabelle von aktiver Zelle Datenbankprogrammierung 12
S Datenbank/Java true/false Datenbankprogrammierung 8
S Java und SQL-Befehle Datenbankprogrammierung 6
L INSERT INTO Befehl in Java Datenbankprogrammierung 8
L Datenbankprogrammierung mit Java und phpMyAdmin Datenbankprogrammierung 4
Korvinus Java mit Cassandra verbinden Datenbankprogrammierung 18
M SQL-Statement SQL mit Java, Update Fehler Datenbankprogrammierung 1
D Installation von MariaDB in java und eclipse Datenbankprogrammierung 2
H Datenbank Export mit Java Datenbankprogrammierung 3
I MariaDB-Verbindung in JAVA Datenbankprogrammierung 11
L Oracle Datenbank über Java aufrufen Datenbankprogrammierung 29
W Daten in Java intern abfragen Datenbankprogrammierung 1
W MySQL Ausgabe von Datenbank in Java-App Datenbankprogrammierung 6
D Java Datenbanken Datenbankprogrammierung 1
Y H2 H2 foreign key in Spark Java ausgeben Datenbankprogrammierung 1
J Java Eclipse Hilfe beim Programmieren Datenbankprogrammierung 7
K Java Object mit Hibernate in MySQL abspeichern Datenbankprogrammierung 1
R Java-Befehle/Operatoren für copy&paste Datenbankprogrammierung 2
C Mit asm laufende Java Anwendung manipulieren Datenbankprogrammierung 1
W Wie liest dieses Java-Programm der Compiler? Datenbankprogrammierung 3
K Java Datenbank auslesen Datenbankprogrammierung 8
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
K HSQLDB .sql Script Aufruf über Java Datenbankprogrammierung 7
B Java Programm und Dantebank umlagern Datenbankprogrammierung 25
B MySQL bplaced Datenbank mit Java ansprechen Datenbankprogrammierung 11
F MySQL Wie kann ich in Java Datensätze aus einer MySQL Datenbank gezielt in einzelne Arrays schreiben? Datenbankprogrammierung 9
F Java Objekte in einer Datenbank speichern Datenbankprogrammierung 4
perlenfischer1984 Java Objecte speichern mit Hibernate ? Datenbankprogrammierung 2
B Probleme mit java.sql.SQLException: ResultSet closed Datenbankprogrammierung 21
O PostgreSQL Java Row Index erhalten Datenbankprogrammierung 1
dzim Cassandra Cluster DB und der Java-Treiber Datenbankprogrammierung 1
H Entity in Java implementieren Datenbankprogrammierung 13
V Fehler beim Generierung Fehler beim Generierung java.lang.ArrayIndexOutOfBoundsException: 0 Datenbankprogrammierung 12
J mySQL- Java Application - Zugriff über Internet Datenbankprogrammierung 3
D MySQL Many to Many Tabellen in Java abbilden? Datenbankprogrammierung 4
P Datanbank für Java-Programmierung Datenbankprogrammierung 10
F Java SQLite Error Datenbankprogrammierung 19
F SQL Datenbank an Java Code anbinden Datenbankprogrammierung 5

Ähnliche Java Themen

Neue Themen


Oben