Beliebige Zeichenkette innerhalb der DB speichern?!

Hallo Zusammen,

ich möchte bewusst ohne PreparedStatement eine beliebige Zeichenkette innerhalb einer DB speichern, um Cross-Site-Scripting zu testen.

Das Speichern von einfache Strings innerhalb der DB funktioniet.
Java:
	public void insertString(String message) {				
		String query = "insert into crossside.messages (id, message) VALUES (NULL, '"+message+"');";
		Statement stm = null;
		try {
			stm = getConnection().createStatement();
			// stm.setEscapeProcessing(false);
			stm.executeUpdate(query);	
			stm.close();
		} catch (SQLException e) {			
			e.printStackTrace();
		}
	}

Was nicht funktioniert ist die Eingabe bzw. das Speichern von dem folgenden String:

Code:
alert( 'Hello', 'xss' );

Sobald ich die obige JS-Zeile eingebe, erhalte ich die folgende Meldung:
Code:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax

Als Kollation für die Text Spalte der DB habe ich 'utf8_unicode_ci' angegeben.

Was muss ich machen, um eine beliebige Zeichenkette innerhalb der DB zu speichern?

Vielen Dank,
Angelika
 
Hi

vllt. verwechselst du da was:
XSS, also zB. hier das Alert einschleusen, kann mit oder ohne Prep.Statements gemacht werden.
Schutz gegen XSS ist, Sachen wie <> (<script>) usw. rauszufiltern.
Das hat mit der DB nicht viel zu tun. Geht genausogut mit Prep.Statements.

Das DB-Risiko ist eine SQL-Injection.
Wie du hier ein
SQL:
insert ... value('string');
hast und als string zB.
', 'hallo', 1, '
verwendest:
SQL:
insert ... value('', 'hallo', 1, '');
Da kommt dann was durcheinander.
Entweder wird bei dir das SQL dadurch ungültig...
aber je nach Eingabe können dadurch auch Passwortabfragen usw. immer wahr gemacht werden.

Schutz dagegen sind eben die Prep.Statements, oder man "escaped" alle Problemzeichen.
' mit \' ersetzen, dann wirds als ' behandelt, nicht als Stringanfang/ende.

Gruß
 
SQL Injection ist mir bekannt. Wie du bereits gesagt hast, hilft gegen SQL-Injection unter anderem die Nutzung von Prepared Statement.

Was XSS betrifft, habe ich kein Angriff reproduzieren können.
Ich habe ein Beispiel gesehen, bei dem der Angreifer ein Gästebucheintrag für den Angriff verwendet hat.
Er hat iinerhalb des Eingabefeldes für das Kommentar ein JS eingetragen, der die Benuzer-Cookies ausgelesen hat.
Hierfür wurde jedoch der Eintrag innerhalb der DB gespeichert.

Ich versuche das Beispiel nachzustellen. Hierfür muss ich JS innerhalb der DB speichern können.

Daher meine Frage:
Wie kann ich JS innerhalb der DB speichern? Bei mir werden die Sonderzeichen nicht zugelassen.

Grüße,
Angelika
 

Neue Beiträge

Zurück