SQL Injection verhindern ohne z.B. prepareStatement

Presler

Mitglied
Mir ist schon klar das man SQL Injection am einfachsten verhinden kann durch z.B.

Code:
 stmt = conn.prepareStatement("INSERT INTO person (name, email) values (?, ?)");
stmt.setString(1, name);
stmt.setString(2, email);

bzw. in Spring
Code:
getSimpleJdbcTemplate()             .update(                     
"insert into table "                             + 
"(column1, column2, column3, column4, column5) VALUES "                             + 
"(:column1, :column2, :column3, :column4, :column5)",                     
new MapSqlParameterSource().addValue("column1",  value1).
addValue("column2",                             value2).
addValue("column3",                             value3).
addValue("column4",                             value4).
addValue("column5", value5));

Aber ich suche eine Möglichkeit mit der man in Java (mit oder ohne Spring Framework) mir einen einzelnen Wert vor SQL Injection schützt also in der Form:

angelehnt an Beispiel 1:
Code:
String sql = "INSERT INTO person (name, email) values (" + 
                    sqlinjectionsafe(name) + ", " +  sqlinjectionsafe(email) + ")");

angelehnt an Beispiel 2:
Code:
String sql = "INSERT INTO person (name, email) values (" + 
                      sqlinjectionsafe(name) + ", " +  sqlinjectionsafe(email) + ")");

getSimpleJdbcTemplate().update( sql ); // String sql ist jetzt sql injection sicher

Wie könnte man soetwas realisieren? Gibt es evtl. eine solche Funktion schon?
 
Zuletzt bearbeitet von einem Moderator:
Sowas git es, nennt sich eben PreparedStatement, was spricht denn dagegen es zu verwenden?
Ansonsten kannst du immer deine eigene Konvertierungs-/Maskierungsroutine schreiben, allerdings ist die Chance dass diese eben Fehler enthält und damit nicht wirklich vor SQL Injections schützt recht hoch.
 
Wenn du sehr genau weißt was du erwartest wäre es denkbar, z.B. wenn du eine PLZ erwartest kannst du mit einer RegEx prüfen das es nur 5 Zahlen sind.

Aber generell? Nein! Erst recht bei Textdaten solltest du das lassen und dich am besten komplett bei allem auf die PreparedStatements verlassen.
 

Zurück
Oben