Escaping von SQL-Strings in Java

Hintergrund:

Derzeit entwickle ich ein Java-Frontend für eine Enterprise-CMS-Datenbank (Business Objects). Im Moment erstelle ich eine Funktion, mit der der Benutzer eine benutzerdefinierte Datenbankabfrage erstellen kann. Ich habe bereits Maßnahmen implementiert, um sicherzustellen, dass der Benutzer nur mithilfe einer Teilmenge der verfügbaren Spalten und Operatoren auswählen kann, die für den Benutzerzugriff genehmigt wurden (z. B. SI_EMAIL_ADDRESS kann ausgewählt werden, während leistungsfähigere Felder wie SI_CUID nicht ausgewählt werden können). Bisher verlief alles reibungslos, aber jetzt ist es an der Zeit, diese Funktion gegen potenzielle SQL-Injection-Angriffe abzusichern.

Die Frage:

Ich suche nach einer Methode, um Benutzereingaben zu umgehen. Ich habe PerparedStatement bereits gesehen, bin jedoch gezwungen, Drittanbieter-APIs für den Zugriff auf die Datenbank zu verwenden. Diese APIs sind für mich unveränderlich und ein direkter Datenbankzugriff kommt nicht in Frage. Die einzelnen Methoden verwenden Zeichenfolgen, die die auszuführenden Abfragen darstellen, wodurch PreparedStatement ungültig wird (das meines Wissens für eine direkte Datenbankverbindung ausgeführt werden muss).

Ich habe überlegt, String.replace () zu verwenden, möchte aber das Rad nach Möglichkeit nicht neu erfinden. Außerdem bin ich weit entfernt von den Sicherheitsexperten, die PerparedStatement entwickelt haben.

Ich hatte mir auch die Java-API-Referenz für PerparedStatement angesehen und gehofft, eine Art toString () -Methode zu finden. Leider konnte ich nichts dergleichen finden.

Jede Hilfe wird sehr geschätzt. Danke im Voraus.

Verweise:

Java - Escape-Zeichenfolge, um SQL-Injection zu verhindern

Java-Äquivalent für PHPs mysql_real_escape_string ()

Antworten auf die Frage(3)

Ihre Antwort auf die Frage