# SQL Injection - Wie Eingabe filter?



## Guest (17. Mai 2007)

Hi, wie kann ich meine Eingaben die ich vom User bekomme richtig Filtern?

Also ich könnte natürlich mir ne Methode schreiben die da z.B. ";" rausfilter oder so.

Aber brauche ich das bei einem PreparedStatement überhaupt? (wird irgendwie im Wikipedaartikel angedeutet)


```
PreparedStatement pstmt = con.prepareStatement("SELECT url FROM myindex WHERE keyword LIKE '%?%");
pstmt.setString(1, var);
ResultSet rset = pstmt.executeQuery();
```

wenn ich also hier als String var = "eingabe"; oder einmal var = "eingabe' ;GO EXEC cmdshell('format C') --"
habe würde ja eigentlich sowas rauskommen:

```
SELECT url, title FROM myindex WHERE keyword LIKE '%eingabe%'
```


```
SELECT url, title FROM myindex WHERE keyword LIKE '%eingabe' ;GO EXEC cmdshell('format C') --%'
```

Würde dies ein PreparedStatement also verhindern?

Beispiele frei zitiert nach wikipedia 
http://de.wikipedia.org/wiki/SQL-Injektion


----------



## kleiner_held (17. Mai 2007)

PreparedStatements sind sicher gegen SQL Injection (außer der JDBC Treiber ist grottenschlecht programmiert).


----------



## SlaterB (18. Mai 2007)

wenn an anderer Stelle ein solcher String korrekt maskiert abgespeicht wird, 
dann wird man sich auch nicht unbedingt darüber freuen,

und vielleicht irgendwann bei anderen internen Anfragen, 
die nicht Prepared sind, sein blaues Wunder erleben,


da ist etwas Filterung doch durchaus nützlich


----------



## Gast (18. Mai 2007)

ohja super danke

btw. hab hier noch nen artikel gefunden der ganz gut ist: http://www.owasp.org/index.php/Preventing_SQL_Injection_in_Java


----------

