Ich möchte eine JDBI-Abfrage dynamisch filtern.JDBI Wie kann ich dynamisch eine WHERE-Klausel erstellen, während SQL Injection verhindert wird?
Die Liste der Parameter wird von der Benutzeroberfläche über REST übergeben, z.
http://localhost/things?foo=bar&baz=taz
http://localhost/things?foo=buz
Welche (plump) gebaut (Jersey @Context UriInfo :: getQueryParameters -> String) so etwas wie folgt aus:
WHERE foo=bar AND baz=taz
Und JDBI geleitet, die wie folgt aussieht:
@UseStringTemplate3StatementLocator
public interface ThingDAO {
@SqlQuery("SELECT * FROM things <where>)
List<Thing> findThingsWhere(@Define("where") String where);
}
Soweit ich verstehe, ist die aktuelle Implementierung anfällig für SQL-Injektion. Ich kann offensichtlich die Spaltennamen, aber nicht die Werte bereinigen. 1
Es muss eine elegantere und SQL-Injection-sichere Möglichkeit geben, dies zu tun.
Ich glaube nicht, hat er die Liste von Parametern des Typs 'Long' (die nicht in der Lage sein sollte, für die Injektion wizardry verwendet werden;)) und' @ BindIn' scheint PreparedStatements zu verwenden welches '@ Define' (so weit ich es verstanden habe) nicht. – unSinn