Um ein wenig wenig in Übung zu bleiben schreibe ich aktuell eine Client/Server Anwendung in JAVA inkl. MySQL-Anbindung.
Das Thema Sicherheit soll dabei natürlich nicht vernachlässigt werden, allerdings bin ich mir hier über bestimmte Eigenheiten von JAVA nicht so ganz sicher.
Die DB wird hauptsächlich als Benutzerverwaltung und Rechteverwaltung genutzt (zumindest derzeit noch, mal gucken was noch so kommt
), so dass die Benutzer derzeit auch noch gar nicht so viele Eingabemöglichkeiten haben.
Als ersten Schritt ist die Anwendung natürlich so geschrieben, dass ausschließlich der Server mit der DB kommuniziert, das sollte eine Selbstverständlichkeit sein, denke ich
Nun muss ich mich aber ja auch um SQL-Injektions kümmern.
Ich habe aktuell 3 Eingabefelder, den Benutzernamen, das Passwort und eine Angabe zu einem Bereich (als String).
Das Passwortfeld wird noch vor der Übertragung vom Client zum Server gehasht, so dass dieses Feld wohl eher nicht anfällig sein dürfte, aber natürlich die anderen beiden.
Die DB-Anbindung habe ich mit einem scheinbar ganz guten Tutorial gemacht, denn dieses hat direkt PreparedStatements verwendet. Habe jetzt nachträglich herausgefunden, dass das auch die empfohlene Variante ist.
Derzeit baue ich meine Variablen aber noch direkt in das Statement ein, also etwa so:
anstatt
Ist hier mit der Funktion setString() letztendlich ein Unterschied zu meiner Variante, da diese Funktion irgendetwas ausfiltert bzw. escaped oder sind beide Varianten äquivalent und ich muss mich noch selber um ein ausfiltern/escapen von ungewollten Zeichen kümmern?
Oder bin ich mit den PreparedStatements bereits gegen Injektions abgesichert (kann ich mir eigentlich nicht vorstellen)?
Habe ich hier noch andere Punkte übersehen, auf die ich unbedingt achten müsste?
Das Thema Sicherheit soll dabei natürlich nicht vernachlässigt werden, allerdings bin ich mir hier über bestimmte Eigenheiten von JAVA nicht so ganz sicher.
Die DB wird hauptsächlich als Benutzerverwaltung und Rechteverwaltung genutzt (zumindest derzeit noch, mal gucken was noch so kommt
Als ersten Schritt ist die Anwendung natürlich so geschrieben, dass ausschließlich der Server mit der DB kommuniziert, das sollte eine Selbstverständlichkeit sein, denke ich
Nun muss ich mich aber ja auch um SQL-Injektions kümmern.
Ich habe aktuell 3 Eingabefelder, den Benutzernamen, das Passwort und eine Angabe zu einem Bereich (als String).
Das Passwortfeld wird noch vor der Übertragung vom Client zum Server gehasht, so dass dieses Feld wohl eher nicht anfällig sein dürfte, aber natürlich die anderen beiden.
Die DB-Anbindung habe ich mit einem scheinbar ganz guten Tutorial gemacht, denn dieses hat direkt PreparedStatements verwendet. Habe jetzt nachträglich herausgefunden, dass das auch die empfohlene Variante ist.
Derzeit baue ich meine Variablen aber noch direkt in das Statement ein, also etwa so:
Code:
PreparedStatement pstmt = con.prepareStatement("SELECT spalte1 FROM tabelle WHERE spalte2 =" + Stringvariable + ");"
Code:
PreparedStatement pstmt = con.prepareStatement("SELECT spalte1 FROM tabelle WHERE spalte2 = ?");
pstmt.setString(1, Stringvariable);
Ist hier mit der Funktion setString() letztendlich ein Unterschied zu meiner Variante, da diese Funktion irgendetwas ausfiltert bzw. escaped oder sind beide Varianten äquivalent und ich muss mich noch selber um ein ausfiltern/escapen von ungewollten Zeichen kümmern?
Oder bin ich mit den PreparedStatements bereits gegen Injektions abgesichert (kann ich mir eigentlich nicht vorstellen)?
Habe ich hier noch andere Punkte übersehen, auf die ich unbedingt achten müsste?